From 49d6fdff9d31961d80ca2e41204683b4e460b1a2 Mon Sep 17 00:00:00 2001 From: jbb01 <32650546+jbb01@users.noreply.github.com> Date: Sat, 13 Sep 2025 00:12:17 +0200 Subject: [PATCH] fully automate 08_revisit_everything --- src/bin/main.rs | 40 ++++++++++----------- src/lib/challenges/c8_revisit_everything.rs | 27 ++++++++++++++ src/lib/challenges/mod.rs | 3 +- 3 files changed, 49 insertions(+), 21 deletions(-) create mode 100644 src/lib/challenges/c8_revisit_everything.rs diff --git a/src/bin/main.rs b/src/bin/main.rs index 1f6fe7b..e694803 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -1,40 +1,40 @@ -use rug::Integer; use lib::submit_with_name; fn main() { - let mut name0 = String::from("ZetaX"); + let mut name = String::from("Jonah"); loop { - let name: &str = &name0; + let name_temp: &str = &name; let (n, x) = lib::challenges::c1_welcome::solve(); - println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name, n, x)); + println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name_temp, n, x)); - let (n, x) = lib::challenges::c2_these_numbers_are_big::solve(name); - println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name, n, x.clone())); + let (n, x) = lib::challenges::c2_these_numbers_are_big::solve(name_temp); + println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name_temp, n, x.clone())); let (n, x) = lib::challenges::c3_are_you_still_doing_this_by_hand::solve(n, x); - println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name, n, x.clone())); + println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name_temp, n, x.clone())); let (n, x) = lib::challenges::c4_broken_proof_of_work::solve(n, x); - println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name, n, x.clone())); + println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name_temp, n, x.clone())); let (n, x) = lib::challenges::c5_what_the_bf::solve(n, x); - println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name, n, x.clone())); + println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name_temp, n, x.clone())); let (n, x) = lib::challenges::c6_automation_is_not_enough::solve(n, x); - println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name, n, x.clone())); + println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name_temp, n, x.clone())); let (n, x) = lib::challenges::c7_weird_assembly_machine::solve(n, x); - println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name, n, x.clone())); + println!("n = {:?}\nx = {:?}\n{:?}\n", n, x, submit_with_name(name_temp, n, x.clone())); - let truth = Integer::from(42); - let w: usize = x.clone().modulo(&truth).try_into().unwrap(); - println!("n = {n:?}\nx = {x:?}\nw = {w:?}\nname={name}"); - - if w == 30 { - break; - } - - name0.insert_str(0, " "); + let (n, x) = match lib::challenges::c8_revisit_everything::solve(n, x) { + Ok(res) => res, + Err(w) => { + println!("name = \"{name}\"\nw = {w}\n"); + name.insert_str(0, " "); + continue; + } + }; + println!("n = {n:?}\nx = {x:?}\nname = \"{name}\"\n{:?}\n", submit_with_name(name_temp, n, x.clone())); + break; } } \ No newline at end of file diff --git a/src/lib/challenges/c8_revisit_everything.rs b/src/lib/challenges/c8_revisit_everything.rs new file mode 100644 index 0000000..558ac32 --- /dev/null +++ b/src/lib/challenges/c8_revisit_everything.rs @@ -0,0 +1,27 @@ +use rug::ops::DivRounding; +use rug::Integer; +use std::str::FromStr; + +const PHI: &str = "4556683258594822402855414380362620295231673046713752880933967889771646856051745784462468117575177892006513392693685616565666555545842363207724851343853529903674824524238732001458342230627654145983386115997227846421784693186847971068054052064"; +const M: &str = "4556683258594822402855414380362620295231673046713752880933967889771646856051745784462468117575177892006513392693685616569935833357648393898915677206732580748330214938398411668157941515847730087263301030154072458063812554524260405671629754999"; +const E: u64 = 65537; +const LIMIT: u128 = 100_000_000_000_000_000_000; + +pub fn solve(n: u64, x: Integer) -> Result<(u128, Integer), u32> { + let truth = Integer::from(42); + let phi = Integer::from_str(PHI).unwrap(); + let m = Integer::from_str(M).unwrap(); + + let k = Integer::from(LIMIT - n as u128) * 100; + let e = Integer::from(E).pow_mod(&k, &phi).unwrap(); + let w: u32 = x.clone().modulo(&truth).try_into().unwrap(); + if w != 30 { + return Err(w); + } + + let mut y = x.clone().div_floor(&truth); + y = y.pow_mod(&e, &m).unwrap(); + + let x: Integer = y * 42 + w; + Ok((LIMIT, x)) +} \ No newline at end of file diff --git a/src/lib/challenges/mod.rs b/src/lib/challenges/mod.rs index 316df95..916cf5a 100644 --- a/src/lib/challenges/mod.rs +++ b/src/lib/challenges/mod.rs @@ -4,4 +4,5 @@ pub mod c3_are_you_still_doing_this_by_hand; pub mod c4_broken_proof_of_work; pub mod c5_what_the_bf; pub mod c6_automation_is_not_enough; -pub mod c7_weird_assembly_machine; \ No newline at end of file +pub mod c7_weird_assembly_machine; +pub mod c8_revisit_everything; \ No newline at end of file