From 2ed82171af3f7a4a982dc4e7510f4c17f78e9783 Mon Sep 17 00:00:00 2001 From: jbb01 <32650546+jbb01@users.noreply.github.com> Date: Thu, 11 Sep 2025 19:50:46 +0200 Subject: [PATCH] stuff --- res/07_weird_assembly_machine.sage | 2 +- src/bin/07_weird_assembly_machine.rs | 50 +++++++++++++++++++--------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/res/07_weird_assembly_machine.sage b/res/07_weird_assembly_machine.sage index 43d20d8..303e242 100644 --- a/res/07_weird_assembly_machine.sage +++ b/res/07_weird_assembly_machine.sage @@ -31,7 +31,7 @@ g = reduce(lambda a, b: a * X + b, [num_to_poly(a) for a in data[128:]]) fg = f(g) fgi = Ti([fg[i] for i in range(0, fg.degree())]) -fgj = Tj([fg[j] for i in range(0, fg.degree())]) +fgj = Tj([fg[i] for i in range(0, fg.degree())]) print("\n\n======= f(g(x)) =======") for i in reversed(range(0, 64)): diff --git a/src/bin/07_weird_assembly_machine.rs b/src/bin/07_weird_assembly_machine.rs index 79de134..b72e76f 100644 --- a/src/bin/07_weird_assembly_machine.rs +++ b/src/bin/07_weird_assembly_machine.rs @@ -40,30 +40,28 @@ const FG_DATA_EVEN: &[u64] = &[ const FG_DATA_ODD: &[u64] = &[131072, 18446744073709551615]; -const N: u64 = 10000069100000000; -const X: u64 = 12686800874197952081; +const N: u64 = 10000117800000000; +const X: u64 = 5905739161907566595; fn main() { - fn do_something(mut n: u64, x: u64) -> u64 { - if x <= n { - n += 1; - } - x.wrapping_sub(n) - } - compute_async(|tx| { let mut n = N; let mut x = X; loop { n += 1; - x = f(x); - x = do_something(n, x); - for _ in 1..100_000_000 { - x = fg(x); - n += 1; - x = do_something(n, x); + x = sub(f(x), n); + + fn foo(n: u64, mut x: u64, k: u64) -> (u64, u64) { + for i in 1..=k { + x = sub(fg(x), n + i); + } + (n + k, x) } + + (n, x) = foo(n, x, 1_000_000); + + x = g(x); tx.send((n, x)).unwrap(); @@ -79,8 +77,28 @@ fn g(x: u64) -> u64 { evaluate(x, &DATA[128..], &DATA[128..]) } +fn add(a: u64, b: u64) -> u64 { + let (result, overflow) = a.overflowing_add(b); + result + overflow as u64 +} + +fn sub(x: u64, mut n: u64) -> u64 { + if x <= n { + n += 1; + } + x.wrapping_sub(n) +} + fn fg(x: u64) -> u64 { - evaluate(x, FG_DATA_EVEN, FG_DATA_ODD) + !x.rotate_left(17) + // evaluate(x, FG_DATA_EVEN, FG_DATA_ODD) +} + +fn fg_n(mut x: u64, n: u64) -> u64 { + for _ in 0..n { + x = fg(x); + } + x } fn evaluate(x: u64, data_even: &[u64], data_odd: &[u64]) -> u64 {