forked from ggriffiniii/aoc
day25
This commit is contained in:
parent
c9e4d63abe
commit
c07c38f17a
2
input/2020/day25.txt
Normal file
2
input/2020/day25.txt
Normal file
@ -0,0 +1,2 @@
|
||||
17773298
|
||||
15530095
|
||||
33
src/day25.rs
Normal file
33
src/day25.rs
Normal file
@ -0,0 +1,33 @@
|
||||
use crate::split_once;
|
||||
use aoc_runner_derive::aoc;
|
||||
|
||||
const MOD: usize = 20201227;
|
||||
|
||||
#[aoc(day25, part1)]
|
||||
fn solve_d25_p1(input: &str) -> usize {
|
||||
let (pubkey1, pubkey2) = split_once(input, "\n").unwrap();
|
||||
let pubkey1: usize = pubkey1.parse().unwrap();
|
||||
let pubkey2: usize = pubkey2.parse().unwrap();
|
||||
let loop_size = loop_size_from_pubkey(pubkey1);
|
||||
encryption_key_from_pubkey(pubkey2, loop_size)
|
||||
}
|
||||
|
||||
fn encryption_key_from_pubkey(pubkey: usize, loop_size: usize) -> usize {
|
||||
let mut value = 1;
|
||||
for _ in 0..loop_size {
|
||||
value *= pubkey;
|
||||
value %= MOD;
|
||||
}
|
||||
value
|
||||
}
|
||||
|
||||
fn loop_size_from_pubkey(pubkey: usize) -> usize {
|
||||
let mut loop_size = 0;
|
||||
let mut value = 1;
|
||||
while value != pubkey {
|
||||
loop_size += 1;
|
||||
value *= 7;
|
||||
value %= MOD;
|
||||
}
|
||||
loop_size
|
||||
}
|
||||
@ -15,6 +15,7 @@ pub mod day21;
|
||||
pub mod day22;
|
||||
pub mod day23;
|
||||
pub mod day24;
|
||||
pub mod day25;
|
||||
pub mod day3;
|
||||
pub mod day4;
|
||||
pub mod day5;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user