Skip to content

Commit d217c00

Browse files
committed
Year 2024 Day 25
1 parent 4966679 commit d217c00

File tree

7 files changed

+106
-4
lines changed

7 files changed

+106
-4
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ Performance is reasonable even on older hardware, for example a 2011 MacBook Pro
9696
| 22 | [Monkey Market](https://adventofcode.com/2024/day/22) | [Source](src/year2024/day22.rs) | 1350 |
9797
| 23 | [LAN Party](https://adventofcode.com/2024/day/23) | [Source](src/year2024/day23.rs) | 43 |
9898
| 24 | [Crossed Wires](https://adventofcode.com/2024/day/24) | [Source](src/year2024/day24.rs) | 36 |
99+
| 25 | [Code Chronicle](https://adventofcode.com/2024/day/25) | [Source](src/year2024/day25.rs) | 12 |
99100

100101
## 2023
101102

benches/benchmark.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,5 +88,5 @@ benchmark!(year2023
8888

8989
benchmark!(year2024
9090
day01, day02, day03, day04, day05, day06, day07, day08, day09, day10, day11, day12, day13,
91-
day14, day15, day16, day17, day18, day19, day20, day21, day22, day23, day24
91+
day14, day15, day16, day17, day18, day19, day20, day21, day22, day23, day24, day25
9292
);

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,5 @@ library!(year2023 "Restore global snow production."
6868

6969
library!(year2024 "Locate the Chief Historian in time for the big Christmas sleigh launch."
7070
day01, day02, day03, day04, day05, day06, day07, day08, day09, day10, day11, day12, day13,
71-
day14, day15, day16, day17, day18, day19, day20, day21, day22, day23, day24
71+
day14, day15, day16, day17, day18, day19, day20, day21, day22, day23, day24, day25
7272
);

src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,5 +138,5 @@ run!(year2023
138138

139139
run!(year2024
140140
day01, day02, day03, day04, day05, day06, day07, day08, day09, day10, day11, day12, day13,
141-
day14, day15, day16, day17, day18, day19, day20, day21, day22, day23, day24
141+
day14, day15, day16, day17, day18, day19, day20, day21, day22, day23, day24, day25
142142
);

src/year2024/day25.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
//! # Code Chronicle
2+
pub fn parse(input: &str) -> &str {
3+
input
4+
}
5+
6+
pub fn part1(input: &str) -> u32 {
7+
let mut iter = input.bytes();
8+
let mut locks = Vec::with_capacity(250);
9+
let mut keys = Vec::with_capacity(250);
10+
let mut result = 0;
11+
12+
loop {
13+
let mut bits = 0;
14+
15+
for _ in 0..41 {
16+
let b = iter.next().unwrap();
17+
bits = (bits << 1) | (b & 1) as u64;
18+
}
19+
20+
bits &= 0b011111_011111_011111_011111_011111_011111_011111;
21+
22+
if bits & 0b011111_000000_000000_000000_000000_000000_000000 != 0 {
23+
locks.push(bits);
24+
} else {
25+
keys.push(bits);
26+
}
27+
28+
iter.next();
29+
if iter.next().is_none() {
30+
break;
31+
}
32+
}
33+
34+
for lock in &locks {
35+
for key in &keys {
36+
if lock & key == 0 {
37+
result += 1;
38+
}
39+
}
40+
}
41+
42+
result
43+
}
44+
45+
pub fn part2(_input: &str) -> &'static str {
46+
"n/a"
47+
}

tests/test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,5 @@ test!(year2023
8181

8282
test!(year2024
8383
day01, day02, day03, day04, day05, day06, day07, day08, day09, day10, day11, day12, day13,
84-
day14, day15, day16, day17, day18, day19, day20, day21, day22, day23, day24
84+
day14, day15, day16, day17, day18, day19, day20, day21, day22, day23, day24, day25
8585
);

tests/year2024/day25.rs

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

0 commit comments

Comments
 (0)