cargo clippy fixes

This commit is contained in:
Daniel S. 2020-12-18 02:53:58 +01:00
parent 818271e4ad
commit 3a72256177
17 changed files with 55 additions and 64 deletions

View File

@ -10,9 +10,9 @@ pub fn input_generator(input: &str) -> Vec<usize> {
} }
#[aoc(day1, part1)] #[aoc(day1, part1)]
pub fn solve_part1(input: &Vec<usize>) -> usize { pub fn solve_part1(input: &[usize]) -> usize {
let mut input = input.clone(); let mut input = input.to_vec();
input.sort(); input.sort_unstable();
for (i1, v1) in input.iter().enumerate() { for (i1, v1) in input.iter().enumerate() {
if v1 > &2020 { if v1 > &2020 {
break; break;
@ -27,9 +27,9 @@ pub fn solve_part1(input: &Vec<usize>) -> usize {
} }
#[aoc(day1, part2)] #[aoc(day1, part2)]
pub fn solve_part2(input: &Vec<usize>) -> usize { pub fn solve_part2(input: &[usize]) -> usize {
let mut input = input.clone(); let mut input = input.to_vec();
input.sort(); input.sort_unstable();
for (i1, v1) in input.iter().enumerate() { for (i1, v1) in input.iter().enumerate() {
if v1 > &2020 { if v1 > &2020 {
break; break;

View File

@ -53,11 +53,11 @@ pub fn input_generator(input: &str) -> Vec<Rule> {
} }
#[aoc(day2, part1)] #[aoc(day2, part1)]
pub fn solve_part1(input: &Vec<Rule>) -> usize { pub fn solve_part1(input: &[Rule]) -> usize {
return input.iter().filter(|v| v.is_valid_part1()).count(); return input.iter().filter(|v| v.is_valid_part1()).count();
} }
#[aoc(day2, part2)] #[aoc(day2, part2)]
pub fn solve_part2(input: &Vec<Rule>) -> usize { pub fn solve_part2(input: &[Rule]) -> usize {
return input.iter().filter(|v| v.is_valid_part2()).count(); return input.iter().filter(|v| v.is_valid_part2()).count();
} }

View File

@ -42,11 +42,7 @@ impl Creds {
return false; return false;
} }
if let Ok(val) = val.parse::<i64>() { if let Ok(val) = val.parse::<i64>() {
if val >= min && val <= max { return val >= min && val <= max;
return true;
} else {
return false;
}
}; };
return false; return false;
} }
@ -61,10 +57,10 @@ impl Creds {
let num: Result<usize, _> = num.parse(); let num: Result<usize, _> = num.parse();
if let Ok(num) = num { if let Ok(num) = num {
if unit == "cm" { if unit == "cm" {
return num >= 150 && num <= 193; return (150..=193).contains(&num);
}; };
if unit == "in" { if unit == "in" {
return num >= 59 && num <= 76; return (59..=76).contains(&num);
}; };
} }
return false; return false;
@ -72,7 +68,7 @@ impl Creds {
fn validate_ecl(val: &str) -> bool { fn validate_ecl(val: &str) -> bool {
let choices: Vec<&str> = vec!["amb", "blu", "brn", "gry", "grn", "hzl", "oth"]; let choices: Vec<&str> = vec!["amb", "blu", "brn", "gry", "grn", "hzl", "oth"];
return choices.iter().find(|&&v| v == val).is_some(); return choices.iter().any(|&v| v == val);
} }
fn validate_hcl(val: &str) -> bool { fn validate_hcl(val: &str) -> bool {
@ -121,10 +117,10 @@ pub fn input_generator(input: &str) -> Vec<Creds> {
let mut ret = vec![]; let mut ret = vec![];
for creds in input.split("\n\n") { for creds in input.split("\n\n") {
let creds = creds.replace("\n", " "); let creds = creds.replace("\n", " ");
let creds = creds.split(" "); let creds = creds.split(' ');
let mut cred_data = Creds::default(); let mut cred_data = Creds::default();
for cred in creds { for cred in creds {
let cred: Vec<&str> = cred.split(":").collect(); let cred: Vec<&str> = cred.split(':').collect();
let (key, value) = (cred[0], cred[1]); let (key, value) = (cred[0], cred[1]);
match key { match key {
"byr" => { "byr" => {
@ -162,11 +158,11 @@ pub fn input_generator(input: &str) -> Vec<Creds> {
} }
#[aoc(day4, part1)] #[aoc(day4, part1)]
pub fn solve_part1(input: &Vec<Creds>) -> usize { pub fn solve_part1(input: &[Creds]) -> usize {
return input.iter().filter(|v| v.is_valid_part1()).count(); return input.iter().filter(|v| v.is_valid_part1()).count();
} }
#[aoc(day4, part2)] #[aoc(day4, part2)]
pub fn solve_part2(input: &Vec<Creds>) -> usize { pub fn solve_part2(input: &[Creds]) -> usize {
return input.iter().filter(|v| v.is_valid_part2()).count(); return input.iter().filter(|v| v.is_valid_part2()).count();
} }

View File

@ -26,7 +26,7 @@ pub fn input_generator(input: &str) -> Vec<Vec<Direction>> {
.collect() .collect()
} }
pub fn seat_to_pos(seat: &Vec<Direction>) -> (usize, usize) { pub fn seat_to_pos(seat: &[Direction]) -> (usize, usize) {
let mut col_range: (usize, usize) = (0, 8); let mut col_range: (usize, usize) = (0, 8);
let mut row_range: (usize, usize) = (0, 128); let mut row_range: (usize, usize) = (0, 128);
for inst in seat { for inst in seat {
@ -57,7 +57,7 @@ pub fn seat_to_pos(seat: &Vec<Direction>) -> (usize, usize) {
} }
#[aoc(day5, part1)] #[aoc(day5, part1)]
pub fn solve_part1(input: &Vec<Vec<Direction>>) -> usize { pub fn solve_part1(input: &[Vec<Direction>]) -> usize {
let mut max_seat_id: usize = 0; let mut max_seat_id: usize = 0;
for seat in input { for seat in input {
let pos = seat_to_pos(seat); let pos = seat_to_pos(seat);
@ -68,7 +68,7 @@ pub fn solve_part1(input: &Vec<Vec<Direction>>) -> usize {
} }
#[aoc(day5, part2)] #[aoc(day5, part2)]
pub fn solve_part2(input: &Vec<Vec<Direction>>) -> usize { pub fn solve_part2(input: &[Vec<Direction>]) -> usize {
let mut seats = [[false; 8]; 128]; let mut seats = [[false; 8]; 128];
for seat in input { for seat in input {
let pos = seat_to_pos(seat); let pos = seat_to_pos(seat);

View File

@ -6,7 +6,7 @@ pub fn input_generator(input: &str) -> Vec<Vec<HashSet<char>>> {
.split("\n\n") .split("\n\n")
.map(|block| { .map(|block| {
block block
.split("\n") .split('\n')
.map(|line| line.chars().collect()) .map(|line| line.chars().collect())
.collect() .collect()
}) })
@ -14,7 +14,7 @@ pub fn input_generator(input: &str) -> Vec<Vec<HashSet<char>>> {
} }
#[aoc(day6, part1)] #[aoc(day6, part1)]
fn solve_part1(data: &Vec<Vec<HashSet<char>>>) -> usize { fn solve_part1(data: &[Vec<HashSet<char>>]) -> usize {
let mut total = 0; let mut total = 0;
for group in data { for group in data {
let mut answers: HashSet<char> = HashSet::new(); let mut answers: HashSet<char> = HashSet::new();
@ -27,7 +27,7 @@ fn solve_part1(data: &Vec<Vec<HashSet<char>>>) -> usize {
} }
#[aoc(day6, part2)] #[aoc(day6, part2)]
fn solve_part2(data: &Vec<Vec<HashSet<char>>>) -> usize { fn solve_part2(data: &[Vec<HashSet<char>>]) -> usize {
let mut total = 0; let mut total = 0;
for group in data { for group in data {
let mut answers: HashSet<char> = HashSet::new(); let mut answers: HashSet<char> = HashSet::new();
@ -35,7 +35,7 @@ fn solve_part2(data: &Vec<Vec<HashSet<char>>>) -> usize {
answers.extend(person); answers.extend(person);
} }
for person in group { for person in group {
answers = answers.intersection(&person).map(|v| *v).collect(); answers = answers.intersection(&person).copied().collect();
} }
total += answers.len(); total += answers.len();
} }

View File

@ -1,6 +1,7 @@
use aoc_runner_derive::{aoc, aoc_generator}; use aoc_runner_derive::{aoc, aoc_generator};
use std::collections::{HashMap, VecDeque}; use std::collections::{HashMap, VecDeque};
#[derive(Default)]
pub struct Data { pub struct Data {
fwd: HashMap<String, Vec<(usize, String)>>, fwd: HashMap<String, Vec<(usize, String)>>,
rev: HashMap<String, Vec<(usize, String)>>, rev: HashMap<String, Vec<(usize, String)>>,
@ -8,10 +9,7 @@ pub struct Data {
impl Data { impl Data {
pub fn new() -> Data { pub fn new() -> Data {
Data { Default::default()
fwd: HashMap::new(),
rev: HashMap::new(),
}
} }
} }

View File

@ -49,10 +49,10 @@ impl From<&str> for Inst {
} }
impl CPU { impl CPU {
fn new(pgm: &Vec<Inst>) -> Self { fn new(pgm: &[Inst]) -> Self {
Self { Self {
ip: 0, ip: 0,
program: pgm.clone(), program: pgm.to_vec(),
acc: 0, acc: 0,
} }
} }
@ -88,7 +88,7 @@ pub fn input_generator(input: &str) -> Vec<Inst> {
#[aoc(day8, part1)] #[aoc(day8, part1)]
#[inline(always)] #[inline(always)]
pub fn solve_part1(input: &Vec<Inst>) -> usize { pub fn solve_part1(input: &[Inst]) -> usize {
let mut seen = HashSet::new(); let mut seen = HashSet::new();
let mut cpu = CPU::new(input); let mut cpu = CPU::new(input);
loop { loop {
@ -103,7 +103,7 @@ pub fn solve_part1(input: &Vec<Inst>) -> usize {
#[aoc(day8, part2)] #[aoc(day8, part2)]
#[inline(always)] #[inline(always)]
pub fn solve_part2(input: &Vec<Inst>) -> usize { pub fn solve_part2(input: &[Inst]) -> usize {
for (idx, inst) in input.iter().enumerate() { for (idx, inst) in input.iter().enumerate() {
match inst { match inst {
Inst::Nop { .. } | Inst::Jmp { .. } => { Inst::Nop { .. } | Inst::Jmp { .. } => {

View File

@ -12,8 +12,8 @@ pub fn input_generator(input: &str) -> Vec<usize> {
#[aoc(day9, part1)] #[aoc(day9, part1)]
#[inline(always)] #[inline(always)]
pub fn solve_part1(input: &Vec<usize>) -> usize { pub fn solve_part1(input: &[usize]) -> usize {
for (n, win) in input.as_slice().windows(25).enumerate() { for (n, win) in input.windows(25).enumerate() {
let n = n + 25; let n = n + 25;
if n >= input.len() { if n >= input.len() {
continue; continue;
@ -39,7 +39,7 @@ pub fn solve_part1(input: &Vec<usize>) -> usize {
#[aoc(day9, part2)] #[aoc(day9, part2)]
#[inline(always)] #[inline(always)]
pub fn solve_part2_fast(input: &Vec<usize>) -> usize { pub fn solve_part2_fast(input: &[usize]) -> usize {
let target_num = solve_part1(input); let target_num = solve_part1(input);
for i in 2..=input.len() { for i in 2..=input.len() {
if let Some(w) = input.windows(i).find(|w| target_num == w.iter().sum()) { if let Some(w) = input.windows(i).find(|w| target_num == w.iter().sum()) {

View File

@ -45,7 +45,7 @@ impl Data {
let mut nodes = self.0.clone(); let mut nodes = self.0.clone();
nodes.push(0); nodes.push(0);
nodes.push(nodes.iter().max().unwrap() + 3); nodes.push(nodes.iter().max().unwrap() + 3);
nodes.sort(); nodes.sort_unstable();
let goal = *nodes.last().unwrap(); let goal = *nodes.last().unwrap();
let mut map: HashMap<u16, HashSet<u16>> = HashMap::new(); let mut map: HashMap<u16, HashSet<u16>> = HashMap::new();
for n in &nodes { for n in &nodes {

View File

@ -137,7 +137,7 @@ pub fn input_generator(input: &str) -> Vec<Command> {
} }
#[aoc(day12, part1)] #[aoc(day12, part1)]
pub fn solve_part1(input: &Vec<Command>) -> usize { pub fn solve_part1(input: &[Command]) -> usize {
let mut ship = Ship::new(); let mut ship = Ship::new();
for cmd in input { for cmd in input {
ship.cmd_p1(cmd); ship.cmd_p1(cmd);
@ -146,7 +146,7 @@ pub fn solve_part1(input: &Vec<Command>) -> usize {
} }
#[aoc(day12, part2)] #[aoc(day12, part2)]
pub fn solve_part2(input: &Vec<Command>) -> usize { pub fn solve_part2(input: &[Command]) -> usize {
let mut ship = Ship::new(); let mut ship = Ship::new();
for cmd in input { for cmd in input {
ship.cmd_p2(cmd); ship.cmd_p2(cmd);

View File

@ -52,10 +52,10 @@ pub fn solve_part2(input: &Data) -> i64 {
.map(|(a, b)| (a as i64, *b as i64)) .map(|(a, b)| (a as i64, *b as i64))
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let mut t = 0; let mut t = 0;
let target = b.iter().map(|(_, b)| b).fold(1, |a, b| a * b); let target: i64 = b.iter().map(|(_, b)| b).product();
loop { loop {
let mut cnt = 0; let mut cnt = 0;
let dt = b let dt: i64= b
.iter() .iter()
.filter_map(|(i, n)| { .filter_map(|(i, n)| {
if (t + i) % n == 0 { if (t + i) % n == 0 {
@ -65,7 +65,7 @@ pub fn solve_part2(input: &Data) -> i64 {
None None
} }
}) })
.fold(1, |a, b| a * b); .product();
if dt == target { if dt == target {
return t % dt; return t % dt;
} }

View File

@ -27,8 +27,8 @@ impl Command {
panic!("Can't apply non-mask command"); panic!("Can't apply non-mask command");
} }
fn apply_mask_v2_inner(&self, addr: &mut u64, s: &Vec<char>, ret: &mut Vec<u64>) { fn apply_mask_v2_inner(&self, addr: &mut u64, s: &[char], ret: &mut Vec<u64>) {
let mut s_c = s.clone(); let mut s_c = s.to_vec();
for (idx, c) in s.iter().enumerate() { for (idx, c) in s.iter().enumerate() {
match *c { match *c {
'0' => (), '0' => (),
@ -55,7 +55,7 @@ impl Command {
raw.reverse(); raw.reverse();
let mut ret = vec![]; let mut ret = vec![];
self.apply_mask_v2_inner(&mut addr, &raw, &mut ret); self.apply_mask_v2_inner(&mut addr, &raw, &mut ret);
ret.sort(); ret.sort_unstable();
ret.dedup(); ret.dedup();
return ret; return ret;
}; };
@ -73,7 +73,7 @@ pub fn input_generator(input: &str) -> Data {
let mut mask_and = 0; let mut mask_and = 0;
let mut mask_or = 0; let mut mask_or = 0;
let mut char_buf = vec![]; let mut char_buf = vec![];
for (_, c) in line.split("=").nth(1).unwrap().trim().chars().enumerate() { for (_, c) in line.split('=').nth(1).unwrap().trim().chars().enumerate() {
char_buf.push(c); char_buf.push(c);
mask_and <<= 1; mask_and <<= 1;
mask_or <<= 1; mask_or <<= 1;
@ -126,7 +126,7 @@ pub fn input_generator(input: &str) -> Data {
} }
#[aoc(day14, part1)] #[aoc(day14, part1)]
pub fn solve_part1(input: &Data) -> u64 { pub fn solve_part1(input: &[Command]) -> u64 {
let mut mem = HashMap::new(); let mut mem = HashMap::new();
let mut mask = Command::Mask { let mut mask = Command::Mask {
and: std::u64::MAX, and: std::u64::MAX,
@ -147,7 +147,7 @@ pub fn solve_part1(input: &Data) -> u64 {
} }
#[aoc(day14, part2)] #[aoc(day14, part2)]
pub fn solve_part2(input: &Data) -> u64 { pub fn solve_part2(input: &[Command]) -> u64 {
let mut mem = HashMap::new(); let mut mem = HashMap::new();
let mut mask = Command::Mask { let mut mask = Command::Mask {
and: std::u64::MAX, and: std::u64::MAX,

View File

@ -36,7 +36,7 @@ impl Seen {
#[aoc_generator(day15)] #[aoc_generator(day15)]
pub fn input_generator(input: &str) -> Data { pub fn input_generator(input: &str) -> Data {
input input
.split(",") .split(',')
.map(|num| num.parse()) .map(|num| num.parse())
.collect::<Result<Vec<usize>, _>>() .collect::<Result<Vec<usize>, _>>()
.unwrap() .unwrap()
@ -56,11 +56,11 @@ fn get_number(start: &[usize], num_turns: usize) -> usize {
} }
#[aoc(day15, part1)] #[aoc(day15, part1)]
pub fn solve_part1(input: &Data) -> usize { pub fn solve_part1(input: &[usize]) -> usize {
return get_number(input, 2020); return get_number(input, 2020);
} }
#[aoc(day15, part2)] #[aoc(day15, part2)]
pub fn solve_part2(input: &Data) -> usize { pub fn solve_part2(input: &[usize]) -> usize {
return get_number(input, 30_000_000); return get_number(input, 30_000_000);
} }

View File

@ -13,7 +13,7 @@ type Data = Input;
pub fn input_generator(input: &str) -> Data { pub fn input_generator(input: &str) -> Data {
let l = input.lines(); let l = input.lines();
let ranges: HashMap<String, Vec<(usize, usize)>> = l let ranges: HashMap<String, Vec<(usize, usize)>> = l
.take_while(|l| l.trim().len() != 0) .take_while(|l| !l.trim().is_empty())
.map(|s| { .map(|s| {
let parts: Vec<_> = s.to_owned().split(": ").map(|v| v.to_owned()).collect(); let parts: Vec<_> = s.to_owned().split(": ").map(|v| v.to_owned()).collect();
let name = parts.get(0).unwrap().trim().to_owned(); let name = parts.get(0).unwrap().trim().to_owned();
@ -25,7 +25,7 @@ pub fn input_generator(input: &str) -> Data {
.map(|l| { .map(|l| {
let r: Vec<usize> = l let r: Vec<usize> = l
.to_owned() .to_owned()
.split("-") .split('-')
.map(|v| v.to_owned().parse().unwrap()) .map(|v| v.to_owned().parse().unwrap())
.collect(); .collect();
(r[0], r[1]) (r[0], r[1])
@ -38,12 +38,12 @@ pub fn input_generator(input: &str) -> Data {
let my_ticket = l let my_ticket = l
.next() .next()
.unwrap() .unwrap()
.split(",") .split(',')
.map(|v| v.parse().unwrap()) .map(|v| v.parse().unwrap())
.collect(); .collect();
let other_tickets = l let other_tickets = l
.skip(2) .skip(2)
.map(|nums| nums.split(",").map(|v| v.parse().unwrap()).collect()) .map(|nums| nums.split(',').map(|v| v.parse().unwrap()).collect())
.collect(); .collect();
Data { Data {
ranges, ranges,
@ -52,7 +52,7 @@ pub fn input_generator(input: &str) -> Data {
} }
} }
fn in_ranges(num: usize, ranges: &Vec<(usize, usize)>) -> bool { fn in_ranges(num: usize, ranges: &[(usize, usize)]) -> bool {
let mut in_range = false; let mut in_range = false;
for (min, max) in ranges { for (min, max) in ranges {
in_range |= (num >= *min) && (num <= *max); in_range |= (num >= *min) && (num <= *max);

View File

@ -37,9 +37,7 @@ impl Data {
} }
let nb = self.count_neighbors(nx, ny, nz); let nb = self.count_neighbors(nx, ny, nz);
let is_active = self.active.contains(&(nx, ny, nz)); let is_active = self.active.contains(&(nx, ny, nz));
if is_active && (nb == 2 || nb == 3) { if nb == 3 || is_active && nb == 2 {
next_active.insert((nx, ny, nz));
} else if !is_active && nb == 3 {
next_active.insert((nx, ny, nz)); next_active.insert((nx, ny, nz));
} }
} }

View File

@ -40,9 +40,7 @@ impl Data {
} }
let nb = self.count_neighbors(nx, ny, nz, nw); let nb = self.count_neighbors(nx, ny, nz, nw);
let is_active = self.active.contains(&(nx, ny, nz, nw)); let is_active = self.active.contains(&(nx, ny, nz, nw));
if is_active && (nb == 2 || nb == 3) { if nb == 3 || is_active && nb == 2 {
next_active.insert((nx, ny, nz, nw));
} else if !is_active && nb == 3 {
next_active.insert((nx, ny, nz, nw)); next_active.insert((nx, ny, nz, nw));
} }
} }

View File

@ -1,3 +1,4 @@
#![allow(clippy::clippy::needless_return)]
use aoc_runner_derive::aoc_lib; use aoc_runner_derive::aoc_lib;
pub mod day01; pub mod day01;
pub mod day02; pub mod day02;