From de99c5f7636a952025ea13de02bafd25bcb6bdec Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Mon, 17 Aug 2026 20:14:16 -0400 Subject: Fix broken --- 2026/games_submissions/asrael_io/source/src/rng.rs | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 2026/games_submissions/asrael_io/source/src/rng.rs (limited to '2026/games_submissions/asrael_io/source/src/rng.rs') diff --git a/2026/games_submissions/asrael_io/source/src/rng.rs b/2026/games_submissions/asrael_io/source/src/rng.rs new file mode 100644 index 0000000..6e46de0 --- /dev/null +++ b/2026/games_submissions/asrael_io/source/src/rng.rs @@ -0,0 +1,35 @@ +pub struct Rng(u32); + +impl Rng { + pub fn new(seed: u32) -> Self { + let mut rng = Self(seed.max(1)); + rng.next(); + rng + } + + pub fn next(&mut self) -> u32 { + self.0 ^= self.0 << 13; + self.0 ^= self.0 >> 17; + self.0 ^= self.0 << 5; + + self.0 + } + + pub fn range(&mut self, n: u32) -> u32 { + self.next() % n + } + + pub fn f32(&mut self) -> f32 { + self.next() as f32 / u32::MAX as f32 + } + + pub fn chance(&mut self, p: f32) -> bool { + self.f32() < p + } +} + +impl Default for Rng { + fn default() -> Self { + Self::new(u32::from_be_bytes(*b"CLNK")) + } +} -- cgit v1.3.1