diff --git a/day25/Cargo.lock b/day25/Cargo.lock new file mode 100644 index 0000000..6eb9cdb --- /dev/null +++ b/day25/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "day25" +version = "0.1.0" diff --git a/day25/Cargo.toml b/day25/Cargo.toml new file mode 100644 index 0000000..b830a9d --- /dev/null +++ b/day25/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day25" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/day25/src/main.rs b/day25/src/main.rs new file mode 100644 index 0000000..8e728f0 --- /dev/null +++ b/day25/src/main.rs @@ -0,0 +1,27 @@ +fn main() { + let row: u64 = 3010; + let col: u64 = 3019; + + let d = row + col - 1; + let index = d * (d - 1) / 2 + col; // 1-indexed position, (1,1) -> 1 + + const START: u64 = 20151125; + const MUL: u64 = 252533; + const MOD: u64 = 33554393; + + let code = (START * mod_pow(MUL, index - 1, MOD)) % MOD; + println!("{}", code); +} + +fn mod_pow(mut base: u64, mut exp: u64, modulus: u64) -> u64 { + let mut result = 1u64; + base %= modulus; + while exp > 0 { + if exp & 1 == 1 { + result = result * base % modulus; + } + exp >>= 1; + base = base * base % modulus; + } + result +}