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