This commit is contained in:
47
battlesnake/src/bin/generate.rs
Normal file
47
battlesnake/src/bin/generate.rs
Normal file
@ -0,0 +1,47 @@
|
||||
use std::{
|
||||
fs::File,
|
||||
io::{self, BufWriter, Write},
|
||||
};
|
||||
|
||||
use az::Az;
|
||||
use bytemuck::cast_slice;
|
||||
|
||||
fn main() -> Result<(), io::Error> {
|
||||
let mut chain = BufWriter::new(File::create("assets/chain")?);
|
||||
|
||||
let mut indices = vec![0u32; (i32::MAX - 1).az::<usize>()];
|
||||
|
||||
let mut x = 1;
|
||||
let mut count = 0;
|
||||
|
||||
loop {
|
||||
if count % 1_000_000 == 0 {
|
||||
println!("current: {count:0>10}");
|
||||
}
|
||||
let next = seedrand(x);
|
||||
|
||||
indices[x.az::<usize>() - 1] = count;
|
||||
chain.write_all(&next.to_ne_bytes())?;
|
||||
|
||||
x = next;
|
||||
count += 1;
|
||||
if x == 1 {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
File::create("assets/table")?.write_all(cast_slice(&indices))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
const fn seedrand(x: i32) -> i32 {
|
||||
const A: i32 = 48_271;
|
||||
const Q: i32 = 44_488;
|
||||
const R: i32 = 3_399;
|
||||
|
||||
let hi = x / Q;
|
||||
let lo = x % Q;
|
||||
let x = A * lo - R * hi;
|
||||
if x < 0 { x + i32::MAX } else { x }
|
||||
}
|
1180
battlesnake/src/bin/seed-cracker.rs
Normal file
1180
battlesnake/src/bin/seed-cracker.rs
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user