convert to unsigned

This commit is contained in:
2025-09-10 17:50:55 +02:00
parent 9ead71c245
commit f83e3ceb9d

View File

@@ -1,75 +1,75 @@
use lib::compute_async;
// https://button.qedaka.de/07_weird_assembly_machine.html?name=Jonah&n=10000000000000070&x=4410539207075887818
const DATA: &[i64] = &[
6563504930575804778, 3177554099846544556, -3586873697942480512, 2361978668621667923,
3143167595286206242, -4351177767704791983, 6896557042998150768, 4462024892233517220,
6694476164706603992, 4101034334834323206, -1527306566727742400, 7555882741782405923,
2628576702768829495, -8553120736898077882, 321448934705618219, -7787914424610429464,
2041445642416509779, -8227695319880516457, -1640881324843482458, -8405827794731797627,
6307216144763488332, 7556799640693587259, -8081863479220607027, 4148363280372604554,
-7603254790459636143, -7504904752727461695, -6246154890355899968, -5156898052074988345,
-8537935471042677533, -7246647235376688349, 8779557412750126267, 8653500638442577520,
const DATA: &[u64] = &[
6563504930575804778, 3177554099846544556, 14859870375767071104, 2361978668621667923,
3143167595286206242, 14095566306004759633, 6896557042998150768, 4462024892233517220,
6694476164706603992, 4101034334834323206, 16919437506981809216, 7555882741782405923,
2628576702768829495, 9893623336811473734, 321448934705618219, 10658829649099122152,
2041445642416509779, 10219048753829035159, 16805862748866069158, 10040916278977753989,
6307216144763488332, 7556799640693587259, 10364880594488944589, 4148363280372604554,
10843489283249915473, 10941839320982089921, 12200589183353651648, 13289846021634563271,
9908808602666874083, 11200096838332863267, 8779557412750126267, 8653500638442577520,
5278382863123262139, 5783872159081604742, 8125287062915914468, 2242536959895356377,
4005886220233485538, -1884410492438099899, 1417622956358486028, -497489745866433392,
-6808362001985207104, 1599533962231322857, 3108365940793816305, 4242306746708662266,
4952142584625629079, 8415262979453050616, -1390194101948094400, 3044401595350323209,
-8513907614683677170, -763724270657036395, 2433910229198456491, -6462339150960227924,
5524563739374899072, -186966673586328886, 4011842113907150331, -4625327361799148597,
6047075845099054027, -2658748364270733797, -2860381304708279422, -8899565194812712952,
7095984364360639673, -6560496321436620621, -8461599891579215954, -5195573135431067130,
4005886220233485538, 16562333581271451717, 1417622956358486028, 17949254327843118224,
11638382071724344512, 1599533962231322857, 3108365940793816305, 4242306746708662266,
4952142584625629079, 8415262979453050616, 17056549971761457216, 3044401595350323209,
9932836459025874446, 17683019803052515221, 2433910229198456491, 11984404922749323692,
5524563739374899072, 18259777400123222730, 4011842113907150331, 13821416711910403019,
6047075845099054027, 15787995709438817819, 15586362769001272194, 9547178878896838664,
7095984364360639673, 11886247752272930995, 9985144182130335662, 13251170938278484486,
4652450378788876572, 1718813027742122072, 663918887826880444, 6670740316248663863,
6700009143044041388, -1523277892154506242, -7059531187577599568, -4480764905626768907,
6700009143044041388, 16923466181555045374, 11387212886131952048, 13965979168082782709,
2422236213071595233, 4699138634002865087, 6493539149331166441, 7518901355855126514,
-2301185110106020155, -3660719921603998966, 6994957500730603671, 6969343254888557997,
-4605760951839656378, -4786181076344625856, -1181021799306461272, -1728607980726133024,
4687774949942350684, 1375392036798645113, 2003687933393780368, -8280928533627317129,
6089981897628107340, -3904996279225979380, -8243053657024706553, 3215632556062991790,
5425642782789424861, -4847519374283752531, -5932357948774481255, 8663785549291965158,
-1638563804489300877, 958315213891692337, -844076178070071666, 1575696692466204467,
-530838066006280056, -3698021980553122728, 1657002993440401555, 661824732220019475,
4209888120689731341, -1678428057965027426, 4243337273520801682, 2339349826505601295,
3824297886017649294, -5743761247566845926, -1834167233212158314, -3795330201249768373,
1731111914295200492, 7107419468395208292, -5315112481049761547, 7650600002594848965,
-8041176673660496005, 8308615406494459745, 3539740125465153737, 5461340322324117263,
3781913427618838536, -2475217834261265043, -3580114014176551551, 9057464874518875466,
-6030613707347919678, -1910512621755226626, -1505951656535084981, 5850876492391527467,
8409677954752892479, -3801201717243607168, 222773118531975189, 8843321651534853339,
-291739419183623249, 874144551332925702, -5417503404995704713, -8312649901816962655,
-3598894922712143892, -3178378307410005736, -5765306100408702010, 9073037709094073235,
5903235897841107084, -4992072185710169392, 1858835333224639960, -9197267406918520567,
4223733763389771996, -3062522675646400310, -7929426045665863068, -3985800966171514281,
5154513940699923775, 1487808311209105759, -7914929491080163388, -4497664465485773686,
7235144852537941787, -2550289777439622965, -807509172314242817, 3843116287193798732,
-4596122870979365558, -4052722409919417182, 5156903507008819810, 8215065870912194262,
4311375377346268620, -8274754757253188746, 163589086269419441, 3851905914730271938,
-3112306220568861233, -2907184818555586714, -1549874620446256143, 5093215075951161381,
-6473455805075171258, 5063471141738823749, -3457383507806458722, -4062839901070935980,
-1719965964080480325, 8426599513938923802, -8311039533847458504, -7796647229437216030,
-6781624469768972991, -1572464954625630082, 5506586508252141218, -5513435772749185823,
16145558963603531461, 14786024152105552650, 6994957500730603671, 6969343254888557997,
13840983121869895238, 13660562997364925760, 17265722274403090344, 16718136092983418592,
4687774949942350684, 1375392036798645113, 2003687933393780368, 10165815540082234487,
6089981897628107340, 14541747794483572236, 10203690416684845063, 3215632556062991790,
5425642782789424861, 13599224699425799085, 12514386124935070361, 8663785549291965158,
16808180269220250739, 958315213891692337, 17602667895639479950, 1575696692466204467,
17915906007703271560, 14748722093156428888, 1657002993440401555, 661824732220019475,
4209888120689731341, 16768316015744524190, 4243337273520801682, 2339349826505601295,
3824297886017649294, 12702982826142705690, 16612576840497393302, 14651413872459783243,
1731111914295200492, 7107419468395208292, 13131631592659790069, 7650600002594848965,
10405567400049055611, 8308615406494459745, 3539740125465153737, 5461340322324117263,
3781913427618838536, 15971526239448286573, 14866630059533000065, 9057464874518875466,
12416130366361631938, 16536231451954324990, 16940792417174466635, 5850876492391527467,
8409677954752892479, 14645542356465944448, 222773118531975189, 8843321651534853339,
18155004654525928367, 874144551332925702, 13029240668713846903, 10134094171892588961,
14847849150997407724, 15268365766299545880, 12681437973300849606, 9073037709094073235,
5903235897841107084, 13454671887999382224, 1858835333224639960, 9249476666791031049,
4223733763389771996, 15384221398063151306, 10517318028043688548, 14460943107538037335,
5154513940699923775, 1487808311209105759, 10531814582629388228, 13949079608223777930,
7235144852537941787, 15896454296269928651, 17639234901395308799, 3843116287193798732,
13850621202730186058, 14394021663790134434, 5156903507008819810, 8215065870912194262,
4311375377346268620, 10171989316456362870, 163589086269419441, 3851905914730271938,
15334437853140690383, 15539559255153964902, 16896869453263295473, 5093215075951161381,
11973288268634380358, 5063471141738823749, 14989360565903092894, 14383904172638615636,
16726778109629071291, 8426599513938923802, 10135704539862093112, 10650096844272335586,
11665119603940578625, 16874279119083921534, 5506586508252141218, 12933308300960365793,
5248411009075909495, 2258335812944206660, 8597559794487195679, 7377768646895780754,
3492695033858227458, -7479669428445147915, 4191289746488745512, -7632347416963112105,
7977751296373368968, 7365044695914860944, 719961330644640786, -8659202527989122927,
-2842298819444727445, 2390604585013608559, -6460369319564221084, -7428795047607723100,
-5880398093447761931, -3089889522231215013, 7512099414187555837, -5696468242041225670,
-8232688398398112446, -5003097262029703081, -1746685831097829678, 4423454089307812290,
9103802734880117173, 2844597800879830746, -4603563975751782727, 8451963189055726564,
3487238693652813426, 1299546876649551534, -6332757101524304903, 6519448239293388674,
-3325740999614551835, -3711773512431649171, -4258072470128833708, 6990763574012814336,
-7620627695188771117, -5703486363218595509, -7902228130660221912, 7398185314804331323,
-1238764366204277246, -8134255449861107836, 2525681217825377635, 1209032913852334193,
2466271244689038797, -6966723311901822667, -9064472516725001854, -6898792668946222441,
6098523488344631739, -4469909062566574999, 5952967173673330791, -7704606825800982705,
-734753427100682325, 614357866529740908, -8987472679502250339, -5191236293775329105,
4405075157125241953, 2658215311620786269, 3438348388076752545, -7173406260431561403,
6461206275074180061, 407462859018947407, -2431661850859724190, -3171959720300317711,
-7578009630841025582, -3144864399218029221, -3142096518101530059, 1004732939015301729,
-4348128917045521182, -6796495403559061023, -2539776794390054680, 531379790791487398,
-6650717971996725481, 2668163399826034890, 1114227485540495868, -6400696048289486953,
3492695033858227458, 10967074645264403701, 4191289746488745512, 10814396656746439511,
7977751296373368968, 7365044695914860944, 719961330644640786, 9787541545720428689,
15604445254264824171, 2390604585013608559, 11986374754145330532, 11017949026101828516,
12566345980261789685, 15356854551478336603, 7512099414187555837, 12750275831668325946,
10214055675311439170, 13443646811679848535, 16700058242611721938, 4423454089307812290,
9103802734880117173, 2844597800879830746, 13843180097957768889, 8451963189055726564,
3487238693652813426, 1299546876649551534, 12113986972185246713, 6519448239293388674,
15121003074094999781, 14734970561277902445, 14188671603580717908, 6990763574012814336,
10826116378520780499, 12743257710490956107, 10544515943049329704, 7398185314804331323,
17207979707505274370, 10312488623848443780, 2525681217825377635, 1209032913852334193,
2466271244689038797, 11480020761807728949, 9382271556984549762, 11547951404763329175,
6098523488344631739, 13976835011142976617, 5952967173673330791, 10742137247908568911,
17711990646608869291, 614357866529740908, 9459271394207301277, 13255507779934222511,
4405075157125241953, 2658215311620786269, 3438348388076752545, 11273337813277990213,
6461206275074180061, 407462859018947407, 16015082222849827426, 15274784353409233905,
10868734442868526034, 15301879674491522395, 15304647555608021557, 1004732939015301729,
14098615156664030434, 11650248670150490593, 15906967279319496936, 531379790791487398,
11796026101712826135, 2668163399826034890, 1114227485540495868, 12046048025420064663,
];
const N: u64 = 10000000000000070;
const X: u64 = 4410539207075887818;
const N: u64 = 10000000047000070;
const X: u64 = 2925478411027973783;
fn main() {
compute_async(|tx| {
@@ -78,7 +78,7 @@ fn main() {
loop {
for _ in 0..1_000_000 {
n += 1;
x = func1(x as i64, n as i64) as u64;
x = func1(x, n);
}
tx.send((n, x)).unwrap();
@@ -86,25 +86,25 @@ fn main() {
});
}
fn func0(a: i64, mut b: i64) -> i64 {
let mut x: i64 = 0;
fn func0(a: u64, mut b: u64) -> u64 {
let mut x: u64 = 0;
while b != 0 {
let c = b.trailing_zeros();
b = b ^ 1i64.rotate_left(c);
b = b ^ 1u64.rotate_left(c);
x = x ^ a.rotate_left(c);
}
x
}
fn func1(x: i64, mut n: i64) -> i64 {
fn func1(x: u64, mut n: u64) -> u64 {
let x = func2(x, &DATA[0..128]);
if x as u64 <= n as u64 {
if x <= n {
n += 1;
}
func2(x.wrapping_sub(n), &DATA[128..256])
}
fn func2(x: i64, data: &[i64]) -> i64 {
fn func2(x: u64, data: &[u64]) -> u64 {
let mut out = 0;
for i in 0..data.len() {
out = func0(out, x) ^ data[i];
@@ -1122,19 +1122,19 @@ mod tests {
#[test]
fn func1test() {
assert_eq!(-6647913008218121033, func1(3463795518, 1682485247));
assert_eq!(11798831065491430583, func1(3463795518, 1682485247));
assert_eq!(448858639501164953, func1(960998136, 3442002022));
assert_eq!(4331216232566681503, func1(351187803, 2185945601));
assert_eq!(6501943885585729174, func1(3084014163, 912127940));
assert_eq!(2773586452911195143, func1(3331261599, 832118177));
assert_eq!(628282543568432452, func1(3183730720, 1526081701));
assert_eq!(-8142008469661888158, func1(2898354542, 3213600473));
assert_eq!(10304735604047663458, func1(2898354542, 3213600473));
assert_eq!(2315370810697976640, func1(3620175596, 4229168685));
assert_eq!(-7362835817632198335, func1(3101298314, 2777662723));
assert_eq!(11083908256077353281, func1(3101298314, 2777662723));
assert_eq!(1049535453269404908, func1(697606818, 58376940));
assert_eq!(9099392518634985681, func1(2281253821, 448345156));
assert_eq!(-6539444416439664472, func1(1944100306, 1005002010));
assert_eq!(-307009257995376345, func1(1942570708, 3368934703));
assert_eq!(11907299657269887144, func1(1944100306, 1005002010));
assert_eq!(18139734815714175271, func1(1942570708, 3368934703));
assert_eq!(1062447846124745127, func1(3917100718, 3641676443));
assert_eq!(417402990515385795, func1(2273104063, 1591049751));
assert_eq!(4610956232650099465, func1(915009791, 3424846050));
@@ -1143,59 +1143,59 @@ mod tests {
assert_eq!(2027385485099641182, func1(450591296, 3078598150));
assert_eq!(6716486476978567051, func1(2143937553, 3348758988));
assert_eq!(8198866944461250122, func1(3018854470, 3889192467));
assert_eq!(-6892937734432467943, func1(1539512006, 2081336392));
assert_eq!(11553806339277083673, func1(1539512006, 2081336392));
assert_eq!(3330621345914728912, func1(3249005184, 2848346678));
assert_eq!(2017804432676575258, func1(2813387773, 345588747));
assert_eq!(-3851243324500536281, func1(1741339163, 1366337508));
assert_eq!(-8149088389038900258, func1(3726105746, 1592824540));
assert_eq!(-864025833727753312, func1(944533733, 159392513));
assert_eq!(14595500749209015335, func1(1741339163, 1366337508));
assert_eq!(10297655684670651358, func1(3726105746, 1592824540));
assert_eq!(17582718239981798304, func1(944533733, 159392513));
assert_eq!(3805337247841405538, func1(1736782229, 3675346013));
assert_eq!(3020134169454795737, func1(1816111867, 1015431153));
assert_eq!(-7185405562863503364, func1(1228907531, 378580379));
assert_eq!(11261338510846048252, func1(1228907531, 378580379));
assert_eq!(5050542971941349005, func1(3569690671, 2362083614));
assert_eq!(-8738485908025481017, func1(3477213620, 3564168958));
assert_eq!(9708258165684070599, func1(3477213620, 3564168958));
assert_eq!(305026462605588943, func1(3774252425, 2324069875));
assert_eq!(7389524862532086589, func1(4025895326, 3447594450));
assert_eq!(5501000178805554808, func1(2566538462, 3057776716));
assert_eq!(5443709636142862360, func1(3467975414, 1642971290));
assert_eq!(-5647699294804073663, func1(395172703, 2859831371));
assert_eq!(-3790155150483676964, func1(3285326579, 1892500115));
assert_eq!(12799044778905477953, func1(395172703, 2859831371));
assert_eq!(14656588923225874652, func1(3285326579, 1892500115));
assert_eq!(8008118761937744849, func1(800637690, 3507769133));
assert_eq!(-6322587067393085875, func1(597363944, 4199822201));
assert_eq!(-399724376400750698, func1(1364679108, 493190167));
assert_eq!(-7875577358517164187, func1(2930362386, 2610687963));
assert_eq!(12124157006316465741, func1(597363944, 4199822201));
assert_eq!(18047019697308800918, func1(1364679108, 493190167));
assert_eq!(10571166715192387429, func1(2930362386, 2610687963));
assert_eq!(1994499305336764829, func1(3567828522, 84275490));
assert_eq!(7418908198762244633, func1(1037230963, 2717520219));
assert_eq!(5452796367047227709, func1(2675210197, 1275728616));
assert_eq!(-2972964860461358140, func1(2514441382, 3332966386));
assert_eq!(-2649746958075508610, func1(2369700278, 3199619927));
assert_eq!(-7044186616817622588, func1(3367457877, 3230470763));
assert_eq!(15473779213248193476, func1(2514441382, 3332966386));
assert_eq!(15796997115634043006, func1(2369700278, 3199619927));
assert_eq!(11402557456891929028, func1(3367457877, 3230470763));
assert_eq!(6835536980872862161, func1(1306487569, 3253890516));
assert_eq!(-6979008849175329004, func1(3943542341, 1681756425));
assert_eq!(11467735224534222612, func1(3943542341, 1681756425));
assert_eq!(1475101851310807018, func1(2498152871, 2876706900));
assert_eq!(-266749111300060042, func1(1782315350, 3779560764));
assert_eq!(18179994962409491574, func1(1782315350, 3779560764));
assert_eq!(992376868483489270, func1(208687741, 3099564482));
assert_eq!(7496704662186028550, func1(4286428893, 1762584453));
assert_eq!(3048486413080026187, func1(4220403443, 1302445672));
assert_eq!(2697521928737745324, func1(3700790948, 1404603133));
assert_eq!(3776917783462454246, func1(3418006820, 4205067295));
assert_eq!(7925713370373496634, func1(2634361755, 2433583492));
assert_eq!(-8175129626831597457, func1(1221220233, 1666949297));
assert_eq!(10271614446877954159, func1(1221220233, 1666949297));
assert_eq!(885713519205033657, func1(1411971418, 1568422082));
assert_eq!(-6745855444148185973, func1(941730219, 105589570));
assert_eq!(-3559579113795921176, func1(137958355, 1591971824));
assert_eq!(11700888629561365643, func1(941730219, 105589570));
assert_eq!(14887164959913630440, func1(137958355, 1591971824));
assert_eq!(1167079093766082498, func1(1872134170, 427167400));
assert_eq!(-4493134586654147298, func1(3187215651, 4176473865));
assert_eq!(-7754702505310392891, func1(3614611815, 1836680903));
assert_eq!(-6983649044183420042, func1(1701800384, 1448715840));
assert_eq!(13953609487055404318, func1(3187215651, 4176473865));
assert_eq!(10692041568399158725, func1(3614611815, 1836680903));
assert_eq!(11463095029526131574, func1(1701800384, 1448715840));
assert_eq!(4547087054263210229, func1(3552467688, 2656183881));
assert_eq!(5377035043274396886, func1(2380145620, 154837088));
assert_eq!(-3862255756903585597, func1(3768076343, 3890514226));
assert_eq!(-2435510004844691182, func1(702062132, 4202662539));
assert_eq!(14584488316805966019, func1(3768076343, 3890514226));
assert_eq!(16011234068864860434, func1(702062132, 4202662539));
assert_eq!(9220688519894226035, func1(3898276141, 947574382));
assert_eq!(-3949690898565418371, func1(3963535759, 3409647466));
assert_eq!(-714504777673817158, func1(2791478715, 904408856));
assert_eq!(14497053175144133245, func1(3963535759, 3409647466));
assert_eq!(17732239296035734458, func1(2791478715, 904408856));
assert_eq!(2503452673785104063, func1(4004260463, 1275381366));
assert_eq!(-3193509090430630583, func1(2779315586, 2488033918));
assert_eq!(15253234983278921033, func1(2779315586, 2488033918));
}
}