Skip to content

Commit 687eab4

Browse files
committed
Year 2024 Day 5
1 parent 7634261 commit 687eab4

File tree

7 files changed

+101
-0
lines changed

7 files changed

+101
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ Performance is reasonable even on older hardware, for example a 2011 MacBook Pro
8181
| 2 | [Red-Nosed Reports](https://adventofcode.com/2024/day/2) | [Source](src/year2024/day02.rs) | 43 |
8282
| 3 | [Mull It Over](https://adventofcode.com/2024/day/3) | [Source](src/year2024/day03.rs) | 8 |
8383
| 4 | [Ceres Search](https://adventofcode.com/2024/day/4) | [Source](src/year2024/day04.rs) | 77 |
84+
| 5 | [Print Queue](https://adventofcode.com/2024/day/5) | [Source](src/year2024/day05.rs) | 43 |
8485

8586
## 2023
8687

benches/benchmark.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,4 +296,5 @@ mod year2024 {
296296
benchmark!(year2024, day02);
297297
benchmark!(year2024, day03);
298298
benchmark!(year2024, day04);
299+
benchmark!(year2024, day05);
299300
}

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,4 +295,5 @@ pub mod year2024 {
295295
pub mod day02;
296296
pub mod day03;
297297
pub mod day04;
298+
pub mod day05;
298299
}

src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,5 +365,6 @@ fn year2024() -> Vec<Solution> {
365365
solution!(year2024, day02),
366366
solution!(year2024, day03),
367367
solution!(year2024, day04),
368+
solution!(year2024, day05),
368369
]
369370
}

src/year2024/day05.rs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
//! # Print Queue
2+
use crate::util::iter::*;
3+
use crate::util::parse::*;
4+
5+
type Input = (usize, usize);
6+
7+
pub fn parse(input: &str) -> Input {
8+
let (prefix, suffix) = input.split_once("\n\n").unwrap();
9+
let mut after = [[false; 100]; 100];
10+
11+
for [from, to] in prefix.iter_unsigned::<usize>().chunk::<2>() {
12+
after[from][to] = true;
13+
}
14+
15+
let mut todo = Vec::new();
16+
let mut done = Vec::new();
17+
let mut part_one = 0;
18+
let mut part_two = 0;
19+
20+
for line in suffix.lines() {
21+
let mut ordered = true;
22+
23+
todo.extend(line.iter_unsigned::<usize>());
24+
done.clear();
25+
26+
while !todo.is_empty() {
27+
let next = todo
28+
.iter()
29+
.enumerate()
30+
.position(|(i, &from)| todo[i + 1..].iter().all(|&to| after[from][to]))
31+
.unwrap();
32+
33+
done.push(todo.remove(next));
34+
ordered &= next == 0;
35+
}
36+
37+
if ordered {
38+
part_one += done[done.len() / 2];
39+
} else {
40+
part_two += done[done.len() / 2];
41+
}
42+
}
43+
44+
(part_one, part_two)
45+
}
46+
47+
pub fn part1(input: &Input) -> usize {
48+
input.0
49+
}
50+
51+
pub fn part2(input: &Input) -> usize {
52+
input.1
53+
}

tests/test.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,4 +285,5 @@ mod year2024 {
285285
mod day02_test;
286286
mod day03_test;
287287
mod day04_test;
288+
mod day05_test;
288289
}

tests/year2024/day05_test.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
use aoc::year2024::day05::*;
2+
3+
const EXAMPLE: &str = "\
4+
47|53
5+
97|13
6+
97|61
7+
97|47
8+
75|29
9+
61|13
10+
75|53
11+
29|13
12+
97|29
13+
53|29
14+
61|53
15+
97|53
16+
61|29
17+
47|13
18+
75|47
19+
97|75
20+
47|61
21+
75|61
22+
47|29
23+
75|13
24+
53|13
25+
26+
75,47,61,53,29
27+
97,61,53,29,13
28+
75,29,13
29+
75,97,47,61,53
30+
61,13,29
31+
97,13,75,29,47";
32+
33+
#[test]
34+
fn part1_test() {
35+
let input = parse(EXAMPLE);
36+
assert_eq!(part1(&input), 143);
37+
}
38+
39+
#[test]
40+
fn part2_test() {
41+
let input = parse(EXAMPLE);
42+
assert_eq!(part2(&input), 123);
43+
}

0 commit comments

Comments
 (0)