fully automate 08_revisit_everything

This commit is contained in:
2025-09-13 00:12:17 +02:00
parent f5d3828cb4
commit 49d6fdff9d
3 changed files with 49 additions and 21 deletions

View File

@@ -1,40 +1,40 @@
use rug::Integer;
use lib::submit_with_name; use lib::submit_with_name;
fn main() { fn main() {
let mut name0 = String::from("ZetaX"); let mut name = String::from("Jonah");
loop { loop {
let name: &str = &name0; let name_temp: &str = &name;
let (n, x) = lib::challenges::c1_welcome::solve(); 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); let (n, x) = lib::challenges::c2_these_numbers_are_big::solve(name_temp);
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::c3_are_you_still_doing_this_by_hand::solve(n, x); 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); 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); 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); 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); 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 (n, x) = match lib::challenges::c8_revisit_everything::solve(n, x) {
let w: usize = x.clone().modulo(&truth).try_into().unwrap(); Ok(res) => res,
println!("n = {n:?}\nx = {x:?}\nw = {w:?}\nname={name}"); Err(w) => {
println!("name = \"{name}\"\nw = {w}\n");
if w == 30 { name.insert_str(0, " ");
break; continue;
} }
};
name0.insert_str(0, " "); println!("n = {n:?}\nx = {x:?}\nname = \"{name}\"\n{:?}\n", submit_with_name(name_temp, n, x.clone()));
break;
} }
} }

View File

@@ -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))
}

View File

@@ -5,3 +5,4 @@ pub mod c4_broken_proof_of_work;
pub mod c5_what_the_bf; pub mod c5_what_the_bf;
pub mod c6_automation_is_not_enough; pub mod c6_automation_is_not_enough;
pub mod c7_weird_assembly_machine; pub mod c7_weird_assembly_machine;
pub mod c8_revisit_everything;