38 lines
786 B
Common Lisp
38 lines
786 B
Common Lisp
//! Pseudo-random number generation using a LFSR algorithm
|
||
|
||
static state: u64 = 0xdeadbeefdeadbeef;
|
||
|
||
pub fn seed(seed: u64) {
|
||
state = seed;
|
||
}
|
||
|
||
pub fn lfsr_next() {
|
||
state ^= state >> 7;
|
||
state ^= state << 9;
|
||
state ^= state >> 13;
|
||
}
|
||
|
||
/// Returns a pseudorandom byte
|
||
pub fn rand() -> u8 {
|
||
for _ in 0..8 {
|
||
lfsr_next()
|
||
}
|
||
state & 0xff
|
||
}
|
||
|
||
// Prints a maze out of diagonal box drawing characters, ['╲', '╱']
|
||
fn mazel(width: u64, height: u64) {
|
||
let walls = ['\u{2571}', '\u{2572}'];
|
||
rand_rect(width, height, walls)
|
||
}
|
||
|
||
// Prints a rectangle with the provided walls
|
||
fn rand_rect(width: u64, height: u64, walls: [char; 2]) {
|
||
for _ in 0..height {
|
||
for _ in 0..width {
|
||
print(walls[rand() % 2])
|
||
}
|
||
println()
|
||
}
|
||
}
|