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 day22;
|
||||||
pub mod day23;
|
pub mod day23;
|
||||||
pub mod day24;
|
pub mod day24;
|
||||||
|
pub mod day25;
|
||||||
pub mod day3;
|
pub mod day3;
|
||||||
pub mod day4;
|
pub mod day4;
|
||||||
pub mod day5;
|
pub mod day5;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user