From c07c38f17a56c26a5fa529c7a1777876c45da340 Mon Sep 17 00:00:00 2001 From: Glenn Griffin Date: Thu, 24 Dec 2020 21:29:17 -0800 Subject: [PATCH] day25 --- input/2020/day25.txt | 2 ++ src/day25.rs | 33 +++++++++++++++++++++++++++++++++ src/lib.rs | 1 + 3 files changed, 36 insertions(+) create mode 100644 input/2020/day25.txt create mode 100644 src/day25.rs diff --git a/input/2020/day25.txt b/input/2020/day25.txt new file mode 100644 index 0000000..3e56505 --- /dev/null +++ b/input/2020/day25.txt @@ -0,0 +1,2 @@ +17773298 +15530095 diff --git a/src/day25.rs b/src/day25.rs new file mode 100644 index 0000000..d05abfe --- /dev/null +++ b/src/day25.rs @@ -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 +} diff --git a/src/lib.rs b/src/lib.rs index 78f4c3b..ffe62b0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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;