Skip to content

Commit bf7f71e

Browse files
Year 2020, Day 25, Part 1+2
1 parent 103b291 commit bf7f71e

File tree

5 files changed

+58
-3
lines changed

5 files changed

+58
-3
lines changed

advent-2020/input/day25.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
8252394
2+
6269621

advent-2020/src/main.rs

+2
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ fn main() -> Result<()> {
5656
println!("23.2) {:?}", run(2020, "day23.txt", raw, day23::part2::solve));
5757
println!("24.1) {:?}", run(2020, "day24.txt", vec_of, day24::part1::solve));
5858
println!("24.2) {:?}", run(2020, "day24.txt", vec_of, day24::part2::solve));
59+
println!("25.1) {:?}", run(2020, "day25.txt", vec_of, day25::part1::solve));
60+
println!("25.2) {:?}", run(2020, "day25.txt", vec_of, day25::part2::solve));
5961

6062
Ok(())
6163
}

advent-2020/src/solutions/day24.rs

-2
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,8 @@ impl HexagonalGrid {
212212
}
213213

214214
pub fn step_n(&mut self, n: u32) {
215-
println!("Count: {}", self.count_black());
216215
for _ in 0..n {
217216
self.step();
218-
println!("Count: {}", self.count_black());
219217
}
220218
}
221219
}

advent-2020/src/solutions/day25.rs

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
pub mod part1 {
2+
use anyhow::Result;
3+
4+
use super::*;
5+
pub fn solve(numbers: Vec<u64>) -> Result<u64> {
6+
Ok(find_encryption_key(numbers[0], numbers[1]))
7+
}
8+
}
9+
10+
pub mod part2 {
11+
use anyhow::Result;
12+
13+
use super::*;
14+
pub fn solve(numbers: Vec<u64>) -> Result<String> {
15+
Ok("Merry Christmas!".to_string())
16+
}
17+
}
18+
19+
pub fn find_loop_number(subject: u64, target: u64) -> u64 {
20+
let mut val = 1;
21+
let mut idx = 0;
22+
while val != target {
23+
idx += 1;
24+
val = (val * subject) % 20201227;
25+
}
26+
return idx;
27+
}
28+
29+
pub fn find_encryption_key(door: u64, card: u64) -> u64 {
30+
let card_loop = find_loop_number(7, card);
31+
let mut val = 1;
32+
for _ in 0..card_loop {
33+
val = (val * door) % 20201227;
34+
}
35+
return val;
36+
}
37+
38+
#[cfg(test)]
39+
mod tests {
40+
use super::*;
41+
#[test]
42+
fn example() {
43+
assert_eq!(8, find_loop_number(7, 5764801));
44+
assert_eq!(11, find_loop_number(7, 17807724));
45+
assert_eq!(14897079, find_encryption_key(5764801, 17807724));
46+
}
47+
48+
#[test]
49+
fn test() {
50+
assert_eq!(181800, find_encryption_key(8252394, 6269621));
51+
}
52+
}

advent-2020/src/solutions/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ pub mod day20;
2121
pub mod day21;
2222
pub mod day22;
2323
pub mod day23;
24-
pub mod day24;
24+
pub mod day24;
25+
pub mod day25;

0 commit comments

Comments
 (0)