diff --git a/2018/src/day04.rs b/2018/src/day04.rs index 2177e8a..348588b 100644 --- a/2018/src/day04.rs +++ b/2018/src/day04.rs @@ -76,7 +76,7 @@ impl Day04 { sleep_start = Some(event.time); } EventType::WAKE => { - let mut minutes = sleeps.entry(guard.unwrap()).or_insert([0u32; 60]); + let minutes = sleeps.entry(guard.unwrap()).or_insert([0u32; 60]); for m in sleep_start.unwrap().minute()..event.time.minute() { minutes[m as usize] += 1; } diff --git a/2018/src/day07.rs b/2018/src/day07.rs index 88a3d5c..4303299 100644 --- a/2018/src/day07.rs +++ b/2018/src/day07.rs @@ -54,6 +54,19 @@ impl Day07 { } } + fn schedule_dependents(&mut self, c: char, starting_points: &mut BinaryHeap>) { + if let Some(dependents) = self.forward.get(&c) { + for d in dependents { + let entry = self.dep_count.get_mut(d).unwrap(); + if *entry == 1 { + starting_points.push(Reverse(*d)); + } else { + *entry -= 1; + } + } + } + } + fn part2_parametrized( &mut self, input: &mut dyn Read, @@ -85,17 +98,7 @@ impl Day07 { while let Some(worker) = workers.pop() { if worker.time == time { let c = worker.work; - - if let Some(dependents) = self.forward.get(&c) { - for d in dependents { - let mut entry = self.dep_count.get_mut(d).unwrap(); - if *entry == 1 { - starting_points.push(Reverse(*d)); - } else { - *entry -= 1; - } - } - } + self.schedule_dependents(c, &mut starting_points); } else { workers.push(worker); break; @@ -122,17 +125,7 @@ impl Solution for Day07 { while let Some(Reverse(c)) = starting_points.pop() { result.push(c); - - if let Some(dependents) = self.forward.get(&c) { - for d in dependents { - let mut entry = self.dep_count.get_mut(d).unwrap(); - if *entry == 1 { - starting_points.push(Reverse(*d)); - } else { - *entry -= 1; - } - } - } + self.schedule_dependents(c, &mut starting_points); } result diff --git a/2018/src/day16.rs b/2018/src/day16.rs index 56919ec..1b57af8 100644 --- a/2018/src/day16.rs +++ b/2018/src/day16.rs @@ -22,7 +22,7 @@ impl Day16 { } } - fn read(&mut self, reader: &mut BufRead, target: &mut [i32]) -> bool { + fn read(&mut self, reader: &mut impl BufRead, target: &mut [i32]) -> bool { self.buf.clear(); if reader.read_line(&mut self.buf).is_err() { return false; diff --git a/2018/src/day19.rs b/2018/src/day19.rs index 22f82b4..e69a5bf 100644 --- a/2018/src/day19.rs +++ b/2018/src/day19.rs @@ -22,7 +22,7 @@ impl Day19 { for line in reader.lines() { let line = line.unwrap(); - if line.chars().next().unwrap() == '#' { + if line.starts_with('#') { self.ip = line.split(' ').last().unwrap().parse().unwrap(); } else { let mut parts = line.split(' '); diff --git a/2018/src/day20.rs b/2018/src/day20.rs index 60cb109..bd0695e 100644 --- a/2018/src/day20.rs +++ b/2018/src/day20.rs @@ -1,3 +1,4 @@ +use std::collections::hash_map::Entry; use std::collections::HashMap; use std::collections::VecDeque; use std::io::Read; @@ -124,8 +125,8 @@ impl Day20 { }); for dir in dirs { let new_pos = dir.walk(pos); - if !visited.contains_key(&new_pos) { - visited.insert(new_pos, dist + 1); + if let Entry::Vacant(entry) = visited.entry(new_pos) { + entry.insert(dist + 1); todo.push_back((dist + 1, new_pos)); } } diff --git a/2018/src/day21.rs b/2018/src/day21.rs index 6a14b9a..704b607 100644 --- a/2018/src/day21.rs +++ b/2018/src/day21.rs @@ -22,14 +22,14 @@ impl Iterator for ValidInputs { fn next(&mut self) -> Option { let mut f = self.f; let mut e = f | 0x10000; - f = 13284195; + f = 13_284_195; loop { let d = e & 0xff; f += d; - f &= 0xffffff; + f &= 0xff_ffff; f *= 65899; - f &= 0xffffff; + f &= 0xff_ffff; if 0x100 > e { self.f = f; diff --git a/2018/src/day22.rs b/2018/src/day22.rs index 3699344..eff7e09 100644 --- a/2018/src/day22.rs +++ b/2018/src/day22.rs @@ -42,12 +42,12 @@ impl Day22 { fn compute_table((x, y): Coordinate, depth: usize) -> Vec> { let mut table = vec![vec![0usize; x + 1]; y + 1]; table[0][0] = 0; - for x in 1..=x { - table[0][x] = (16807 * x + depth) % MOD_BASE; + for (x, entry) in table[0].iter_mut().enumerate().skip(1) { + *entry = (16807 * x + depth) % MOD_BASE; } - for y in 1..=y { - table[y][0] = (48271 * y + depth) % MOD_BASE; + for (y, entry) in table.iter_mut().enumerate().skip(1) { + entry[0] = (48271 * y + depth) % MOD_BASE; } for y in 1..=y { diff --git a/2018/src/day24.rs b/2018/src/day24.rs index f562ac2..ca97a8b 100644 --- a/2018/src/day24.rs +++ b/2018/src/day24.rs @@ -171,7 +171,7 @@ impl Day24 { seen = Some(unit.faction); } - return false; + false } fn full_simulation(&mut self) { diff --git a/2018/src/lib.rs b/2018/src/lib.rs index 7a9f641..6130d22 100644 --- a/2018/src/lib.rs +++ b/2018/src/lib.rs @@ -31,7 +31,7 @@ pub mod day23; pub mod day24; pub mod day25; -pub fn get_impl(day: u32) -> Box { +pub fn get_impl(day: u32) -> Box { match day { 1 => Box::new(day01::Day01::new()), 2 => Box::new(day02::Day02::new()), diff --git a/2018/src/main.rs b/2018/src/main.rs index fb29ba9..c1b1784 100644 --- a/2018/src/main.rs +++ b/2018/src/main.rs @@ -42,7 +42,7 @@ fn main() { .get_matches(); let mut implementation = get_impl(value_t_or_exit!(matches, "day", u32)); - let mut data: Box = match matches.value_of("input") { + let mut data: Box = match matches.value_of("input") { Some(filename) => Box::new(fs::File::open(filename).unwrap()), None => Box::new(io::stdin()), };