Skip to content

Commit 4621fe3

Browse files
committed
Tidy code
1 parent 6dc0804 commit 4621fe3

File tree

5 files changed

+40
-32
lines changed

5 files changed

+40
-32
lines changed

src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
macro_rules! library {
1414
($year:tt $description:literal $($day:tt),*) => {
1515
#[doc = concat!("# ", $description)]
16-
pub mod $year {$(pub mod $day;)*}
16+
pub mod $year {
17+
$(pub mod $day;)*
18+
}
1719
}
1820
}
1921

src/main.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,30 @@ use aoc::util::parse::*;
33
use aoc::*;
44
use std::env::args;
55
use std::fs::read_to_string;
6-
use std::iter::empty;
76
use std::time::{Duration, Instant};
87

98
fn main() {
109
// Parse command line options
11-
let args: Vec<_> = args().collect();
12-
let args: Vec<_> = args.iter().map(String::as_str).collect();
13-
let mut iter = args.iter().flat_map(|arg| arg.iter_unsigned::<u32>());
10+
let mut iter = args().flat_map(|arg| arg.as_str().iter_unsigned().collect::<Vec<u32>>());
1411
let (year, day) = (iter.next(), iter.next());
1512

13+
let solutions = [
14+
year2015(),
15+
year2016(),
16+
year2017(),
17+
year2018(),
18+
year2019(),
19+
year2020(),
20+
year2021(),
21+
year2022(),
22+
year2023(),
23+
year2024(),
24+
];
25+
1626
// Filter solutions then pretty print output.
17-
let (stars, duration) = empty()
18-
.chain(year2015())
19-
.chain(year2016())
20-
.chain(year2017())
21-
.chain(year2018())
22-
.chain(year2019())
23-
.chain(year2020())
24-
.chain(year2021())
25-
.chain(year2022())
26-
.chain(year2023())
27-
.chain(year2024())
27+
let (stars, duration) = solutions
28+
.iter()
29+
.flatten()
2830
.filter(|solution| year.is_none_or(|y| y == solution.year))
2931
.filter(|solution| day.is_none_or(|d| d == solution.day))
3032
.fold((0, Duration::ZERO), |(stars, duration), Solution { year, day, wrapper }| {
@@ -50,7 +52,7 @@ fn main() {
5052
});
5153

5254
// Optionally print totals.
53-
if args.contains(&"--totals") {
55+
if args().any(|arg| arg == "--totals") {
5456
println!("{BOLD}{YELLOW}⭐ {}{RESET}", stars);
5557
println!("{BOLD}{WHITE}🕓 {} ms{RESET}", duration.as_millis());
5658
}

src/year2023/day16.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ impl BitSet {
5858
}
5959

6060
fn union(&mut self, other: &BitSet) {
61-
self.bits.iter_mut().zip(other.bits.iter()).for_each(|(a, b)| *a |= b);
61+
self.bits.iter_mut().zip(&other.bits).for_each(|(a, b)| *a |= b);
6262
}
6363

6464
fn size(&self) -> u32 {
@@ -236,8 +236,8 @@ fn strong_connect(graph: &mut Graph, position: Point) -> usize {
236236
{
237237
let other = &graph.nodes[next];
238238
node.tiles.union(&other.tiles);
239-
node.from.extend(other.from.iter());
240-
node.to.extend(other.to.iter());
239+
node.from.extend(&other.from);
240+
node.to.extend(&other.to);
241241
}
242242

243243
// Mark node as done.

src/year2023/day23.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,8 @@ pub fn part1(input: &Input) -> u32 {
209209

210210
for y in 0..6 {
211211
for x in 0..6 {
212-
let left = if x == 0 { 0 } else { total[y][x - 1] + input.horizontal[y][x - 1] };
213-
let above = if y == 0 { 0 } else { total[y - 1][x] + input.vertical[y - 1][x] };
212+
let left = if x > 0 { total[y][x - 1] + input.horizontal[y][x - 1] } else { 0 };
213+
let above = if y > 0 { total[y - 1][x] + input.vertical[y - 1][x] } else { 0 };
214214
total[y][x] = left.max(above);
215215
}
216216
}
@@ -255,15 +255,17 @@ pub fn part2(input: &Input) -> u32 {
255255
for ((row, gap), steps) in current.drain() {
256256
for &(next_row, next_gap, horizontal, vertical) in &graph[&row] {
257257
// Only 1 gap total is allowed, otherwise we can make a longer path.
258-
if !(gap && next_gap) {
259-
// The bit sets represent the horizonal and vertical moves from the
260-
// previous row.
261-
let extra = horizontal.biterator().map(|x| input.horizontal[y][x]).sum::<u32>()
262-
+ vertical.biterator().map(|x| input.vertical[y][x]).sum::<u32>();
263-
264-
let e = next.entry((next_row, gap || next_gap)).or_insert(0);
265-
*e = (*e).max(steps + extra);
258+
if gap && next_gap {
259+
continue;
266260
}
261+
262+
// The bit sets represent the horizontal and vertical moves from the previous row.
263+
let extra = horizontal.biterator().map(|x| input.horizontal[y][x]).sum::<u32>()
264+
+ vertical.biterator().map(|x| input.vertical[y][x]).sum::<u32>();
265+
266+
// De-duplicate states so that each row has at most 76 states.
267+
let e = next.entry((next_row, gap || next_gap)).or_insert(0);
268+
*e = (*e).max(steps + extra);
267269
}
268270
}
269271

@@ -274,7 +276,7 @@ pub fn part2(input: &Input) -> u32 {
274276
input.extra + current[&(end, true)]
275277
}
276278

277-
/// Convert maze to unidrected graph.
279+
/// Convert maze to undirected graph.
278280
fn compress(input: &str) -> Graph {
279281
let mut grid = Grid::parse(input);
280282
let width = grid.width;

tests/test.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030

3131
macro_rules! test {
3232
($year:tt $($day:tt),*) => {
33-
pub mod $year {$(pub mod $day;)*}
33+
pub mod $year {
34+
$(pub mod $day;)*
35+
}
3436
}
3537
}
3638

0 commit comments

Comments
 (0)