stuff
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
use lib::compute_async;
|
||||||
|
|
||||||
// https://button.qedaka.de/07_weird_assembly_machine.html?name=Jonah&n=10000000000000070&x=4410539207075887818
|
// https://button.qedaka.de/07_weird_assembly_machine.html?name=Jonah&n=10000000000000070&x=4410539207075887818
|
||||||
const DATA: &[i64] = &[
|
const DATA: &[i64] = &[
|
||||||
6563504930575804778, 3177554099846544556, -3586873697942480512, 2361978668621667923,
|
6563504930575804778, 3177554099846544556, -3586873697942480512, 2361978668621667923,
|
||||||
@@ -66,129 +68,49 @@ const DATA: &[i64] = &[
|
|||||||
-6650717971996725481, 2668163399826034890, 1114227485540495868, -6400696048289486953,
|
-6650717971996725481, 2668163399826034890, 1114227485540495868, -6400696048289486953,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const N: u64 = 10000000000000070;
|
||||||
|
const X: u64 = 4410539207075887818;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
compute_async(|tx| {
|
||||||
|
let mut n = N;
|
||||||
|
let mut x = X;
|
||||||
|
loop {
|
||||||
|
for _ in 0..1_000_000 {
|
||||||
|
n += 1;
|
||||||
|
x = func1(x as i64, n as i64) as u64;
|
||||||
|
}
|
||||||
|
|
||||||
|
tx.send((n, x)).unwrap();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
(module
|
|
||||||
(export "f" (func $func0))
|
|
||||||
(func $func0 (param $var0 i64) (param $var1 i64) (result i64)
|
|
||||||
(local $var2 i64)
|
|
||||||
i64.const 0
|
|
||||||
loop $label0 (param i64) (result i64)
|
|
||||||
local.get $var0
|
|
||||||
local.get $var1
|
|
||||||
i64.ctz
|
|
||||||
local.tee $var2
|
|
||||||
i64.rotl
|
|
||||||
i64.xor
|
|
||||||
local.get $var1
|
|
||||||
i64.const 1
|
|
||||||
local.get $var2
|
|
||||||
i64.rotl
|
|
||||||
i64.xor
|
|
||||||
local.tee $var1
|
|
||||||
i64.eqz
|
|
||||||
i32.eqz
|
|
||||||
br_if $label0
|
|
||||||
end $label0
|
|
||||||
)
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
fn func0(a: i64, mut b: i64) -> i64 {
|
fn func0(a: i64, mut b: i64) -> i64 {
|
||||||
let mut c: i64;
|
|
||||||
let mut x: i64 = 0;
|
let mut x: i64 = 0;
|
||||||
loop {
|
while b != 0 {
|
||||||
c = b.trailing_zeros() as i64;
|
let c = b.trailing_zeros();
|
||||||
b = b ^ 1i64.rotate_left(c as u32);
|
b = b ^ 1i64.rotate_left(c);
|
||||||
x = x ^ a.rotate_left(c as u32);
|
x = x ^ a.rotate_left(c);
|
||||||
|
|
||||||
if b == 0 {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
x
|
x
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
fn func1(x: i64, mut n: i64) -> i64 {
|
||||||
(func $func1 (param $var0 i64) (param $var1 i64) (result i64)
|
let x = func2(x, &DATA[0..128]);
|
||||||
(local $var2 i32)
|
if x as u64 <= n as u64 {
|
||||||
i64.const 0
|
n += 1;
|
||||||
loop $label0 (param i64) (result i64)
|
|
||||||
local.get $var0
|
|
||||||
call $func0
|
|
||||||
local.get $var2
|
|
||||||
i64.load
|
|
||||||
i64.xor
|
|
||||||
i32.const 1016
|
|
||||||
i32.const 8
|
|
||||||
local.get $var2
|
|
||||||
i32.add
|
|
||||||
local.tee $var2
|
|
||||||
i32.and
|
|
||||||
br_if $label0
|
|
||||||
local.tee $var0
|
|
||||||
local.get $var1
|
|
||||||
i64.le_u
|
|
||||||
if
|
|
||||||
i64.const 1
|
|
||||||
local.get $var1
|
|
||||||
i64.add
|
|
||||||
local.set $var1
|
|
||||||
end
|
|
||||||
local.get $var0
|
|
||||||
i32.const 2040
|
|
||||||
local.get $var2
|
|
||||||
i32.and
|
|
||||||
if (param i64) (result i64)
|
|
||||||
local.get $var1
|
|
||||||
i64.sub
|
|
||||||
local.set $var0
|
|
||||||
i64.const 0
|
|
||||||
br $label0
|
|
||||||
end
|
|
||||||
end $label0
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
fn func1(mut var0: i64, mut var1: i64) -> i64 {
|
|
||||||
let mut var2: usize = 0;
|
|
||||||
|
|
||||||
let mut x = 0;
|
|
||||||
'label0: loop {
|
|
||||||
println!("{var0} {var1} {var2}");
|
|
||||||
x = func0(x, var0) ^ DATA[var2];
|
|
||||||
|
|
||||||
var2 += 1;
|
|
||||||
if var2 & 127 != 0 {
|
|
||||||
continue 'label0;
|
|
||||||
}
|
|
||||||
|
|
||||||
var0 = x;
|
|
||||||
|
|
||||||
if var0 as u64 <= var1 as u64 {
|
|
||||||
var1 += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
println!("b{var0} {var1} {var2}");
|
|
||||||
if var2 < 256 {
|
|
||||||
var0 -= var1;
|
|
||||||
x = 0;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
var0
|
func2(x.wrapping_sub(n), &DATA[128..256])
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
fn func2(x: i64, data: &[i64]) -> i64 {
|
||||||
|
let mut out = 0;
|
||||||
(module
|
for i in 0..data.len() {
|
||||||
(memory $memory0 1 1)
|
out = func0(out, x) ^ data[i];
|
||||||
(export "f" (func $func1))
|
}
|
||||||
(data (i32.const 0) "j\e9~\9c\f5@\16[\ac|\f0O\9e\f0\18,\80Y\f23`\dd8\ceS\9e>\b6\15o\c7 \22\97\8dRF\c6\9e+Q\f4`\b1\df\82\9d\c3p\86\1fQ\17~\b5_\a4\88\87\a8\ffK\ec=\d8\13\a8Z\9a\8e\e7\5c\06\efz\d3\ff\cc\e98@L\12\03\c5\ea\cd\ea#\e3q$R\e3\dbh7Tg\99\95\94z$F\ab)\94\016M\89+]\8e^\1a\04v\04\e8e\f4\cb\17\c5\eb\93SS\81\e8\fe\abT\1c\97\bc`\e2\b2Z\d1\8d\a6\c2!\fa k:\e9\85\f3\e7\1b(\80X\8bL\88<\a6\aa\bb\87W;=WN<%\dfh\cdg\da5\fcs\d7\8f\8a\1e\e2\adl\f2\919Q\c6\ddE\0d\d0{\96\c1\f0\89\dc\e38\d9\97\c0\81D\8483Q\a9\c7\9c*G\8b\04o\b8\e34K\cd\ec(\83\89#S\ce\da\bb\bcn\9b\bbl\1eh\f3@\d7yp^\fc\81\fbh\17x\bb\aa\f8x?\95@I\86\a6T\9c\15qDP\e4\1a.\bb\88\d1\c2p\d9C?\ca{\17\1f\1f\e2,\a6\0fK\c4\977EH5#\a4:\d9\e5\0c\c8/c\91h\ac\13\90\5c;B\b6\8f\18\f9\c0\84g\d9\d4\d6\83\a1\e9\98\f8\f8\a9\af2\16\f14\f0\b4Z\22#+\fa\17\d0i\82\b3\df:\97\07\b2qq\8b\b9D\f8^\cb\05\18\05\c9t@h\8ap\d4\09\b5\ec\09\10}\fc\1e\e3?*\0e>I\10\22\86\d8\89\95\9f$}\d2\b4f\f5\abF\90Bu\fc\c6!\ac\89\ea\f8\c7(Q\a6\80\cfqXs1\abL\ca\ea\0c\0c\cd\c2g\fd\fbMc\9e%\ed\ac7\cb+\11>E\89\cf\bf\cbc\f9<q\87\ebS\1b\f6}\08s:\1a\db\82\d3\b1\ba[\e2M\d8\08\18\c2s\9bd~\84\b9$q\e9.\00zb\b3h\83\caZo\f4\a4\ae\df\ef\e6\ba[\92\8a\06\9a\11\ba\c2\9d\e5\b7\1c\b1\d7B\f8\d2\90@X\00\e2\91Ws\da\17\bc\f7\97\fc\b5\b66\097\e7\e0z\f9:\93\5c\acj\02C\d16\fb\5c\fe\c3\ec\e7\d3:\dc\ea\b0I\a5\b3\c9\81\07\9e\f5i\14\f6\0e \d1\c1\e1F8\92\00\83\9d!\bf\1b\0e\c6\b0\b16A\e9\f4\f9\bas\af\1dZ\f2\9f\f2@\f2\80Xh\c5f\b6\a5U\8c\10\e0\0a\0b\99j\a0\822\cd\97x\00:\c9\14\13a\ad\ade\e1\c3\14\b8`Fv;\11\d1\0c\15\c0@%\c8Y\ab\11\94\bd\a8\7fXL\ee*\9c\ef\e0\de\e983\c0\02\e8\5c\d3I\e6zR\0eAy\c3H4\c5_\16\13\90>\ac6\8f\87\ce\1bwT\bfv_;\14\8dL\c2\ae\10E\f6\83T\0cn\83\d7\92\aa\ce\c9\07\c8\8e\5c_\ca\9a\8d\ae\e5P\c8\c58\a0,\ddVSZ]\c1KK\ad;\fe\f5\cf&\ba\bc\99\02\d5f\e0\07\ac\ad\e6\ca\b5\eb\0d\f3;xsD\9a\bb\e6\a6B\e91\e7\dd\12\9c\9eL\0d\8e\96\c3*0=I\f43\bf4\1c\cb\ff\dd\15\88\b8pj\97\15\a2\f8Xl\8b\05\9a\fc\ad\cc\93(\c6\7fq\db\fe\16\13\d3\8ac\16F/\09\0d'\d9\d9\f0\86l:\9e\1f\f2\ef\92\06\b5\e8\92\c7a\a2\c4\5c\e3:\0f\f1<\d6E\0aw \8e\fa[S\aa\a2\125\1a\a8\1f\bc\93\0fJ\b0\96n\ba\85\9e\ba\8b\e6K\1c2]JGT\cb\ec\0a\03>\1d%\06\18d^d\8bY\a0\a2b\f5\a8\c8\f1[\ed<\b6\c5\c0D\f1*d,j{\17OVk\00h\90a\a7p\f7\b0!Ns\c9\10\8c\c7\e3\ae\1f1\0fw\a5u\16\94\caK\088\80\989\0e|4mE%w~B\a6\dd\81\dd\9b\b9E\e1P\ceJ\8dF\9bP\94\b2}\c2\fc\ec\e3\c8\f4N\ac\fe%a\91\e4~|\e5K\b0P\7f\f2\c8\19\eb+4\ae\a9+}2Q?\cez \8b-\b5t\80\07\17\84-k?\cb\15\b8\9a\93\f8r\17\03\dbtA*0\ca\b9z\af\d3\94@\8b\88\f3\fb\06\d1\8a\88\d6\95!\0cw\08\c37[)\d1\b4\a1\a1\03\e4\f4\88\a3\8c\ec'\c9\b3\22(\0e\ce\18\f1\04\e9\c4!\e4\d3\c6+\bf\c7\a5\84\fd\af\93\b3F\b4\b9\e7\e9}\8c@'\bc\c5\81\ecQ\d02\a3\d5\cb\98\b8\ba\d8\ad\cc\14\e3\e8\cb\19\09\f1W\ca\05\be\5c\80\dc\d0\ab\c0z\b7\9d:\cax\849\da\bb\7f\d5d\1a[\fb\05\05\f5\91W*\f0\91#\97\af\c8?\c57\89\1e\83\88G_\19~\bb\c6\c1\a5\14\c4O\e7\1d\90\85(\92\8a\c4\d2\8f\ff\15\95\c1\1b\1f\05\f2\e8ehd\cb\b8f\9d\f5\8c\9b\dc\ff\00W\a7\af&\cb\f4LX\b4\c8\e6}U5J\f59\a3\99J7\c0\a2\f4|\bfp\d6\c1\c7b\12:\ccj\00\91G\d6\06(b\e2\c6\01r\cc\0d\17$\10\15\d5;v3s\cac**\8d\b1/8@h/E\02\c2T\b9k\05\b8t5\cf%\c1j\fb\dd\ce\d4f\f7\95y\cf\9a\a7\d7\f1S\e8\89>\bd}\ea%\b0\bbf \bc\aeFF\d8M=>\aa)\a6E\c0\c8\0d-\10EF\9e\ec\e6\84\04\e8\04\d0T8b\c5\a2\e4\9d\c7\bb\7f8\85\11t!\e8\1a\11\cf\a4\9cK\f1t8M\cb\e6\93A\a9\8c\e2z\5c:\a7\be\cc\93A\d5R\afy\d4\e2\a1~\e0\c9}t{-\ea\a2\d6S\0dASkL\e1|ZI`W|\b3w\138g\01\1a\d6HD\1b\15\eat8W\1f\1f\f8\96\cd\14\abPw\92\c3<\c9~\19cf\02\fd\e3\d1\a0\8bx0\f5\8c-\a8H\e02\98(\de2j\d1s*:W#\8bQvt\14\96\88(\bf>\89\aa\b6n\90Q\e1\16!\e55f\12d\17\05\04\d1\fd\09\918\0b\e1-U\d4\87k!|iH \8e\d8o\00(@4\22-!d\e5\8a\15U(X\a6\a4\1b)~C\9e\e7\98\f5o)\f6\16\a1d\ae[\fc4\b8\d9\81\1e\d5\fd\bb\11\cc\9dV@h:\be\d6\a6P\14\f2\b0B=\003\85\9d\bf\8dWx\fd7\8cm\91\ba\d2\b64\af}\86\c2\e7\c2\f1p\c9\0eDc=\b5Q\c2uZ4W~\da\b6L\ea\a0\0az'\b9\ae\87l\f4\da\1c\c0\e4#Xr\bdgKurV,\9e\1d)e0\ae6\aa\bf\ff\ea\08\12\f9\bb\cf\f2\f7\86\1d\a8\82\d7\a0\d2\a1\bbyZ\e5\a8\05o.\98\d8\d1m\be\ce\00\a8!}\ccT\cb\19\0e\a6I\e8\c4\00$\c6\91n.\04a\d3\fe\c4\ae|\17>\96K1\12\fb^%\d9\b0(\fc\e5\09b\a5U\92;sl\b7X\a2\abf\02n\fbG_\06\cf\ee\84O\be\f6\c3Q\1d\8fc\8d[\9c\af\05\0d#q\80\ec\87\07Y\c7\10\cd]sS\a1\f49\225\b1\a8!\0f:Q\9f\82\b1P\8cE\864\82\972dt\9e\90B\a0\bbi(!\cdN\a2Ti\84k\e3c\b1\f7\c1g(\5c\b2\1a0\9dRO\1f\15\a6\e9\bc\13\95\ab\b7)\a4\a6\a1\cd\f5l\d8x\7f9\a3\86\08\9d~\bd57\15F\83\af\f8g\5c\18\06\f5\b7a\1cY-\84\f8!=]H\a9\f9\bd\e0\e3$\a1\0eZM\a4w\b7/E\ddi1\03\f1r\9c\ddCR\ce\df\d0\aaYOK\fd\baO\99\a7\05b\22\a3\1dn\00A\de\f1\f3\a6\adp\ef\fa\d3\d2K;\09d\80\d5\96[M\d6\b9}2[\d45\0a\91D\dd\07e\d4a*$\e4H\87\f1\0d\e2\d4\e5\8d\c9W\a8\c3\e1yI\99p\ff\ad\a1\e8\b8\999v\e6\c0\dc\a6\af\f2\b6\1a\d7_\07\17/\d4\d1=\e7\b3\a3\caPT\c1y8\07%\fc1\9e\a2\fe\87v\0f\97gu>\db(,\a7")
|
out
|
||||||
)
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
Reference in New Issue
Block a user