diff options
| author | Alex Pickering <alex@cogarr.net> | 2026-02-01 13:14:32 -0600 |
|---|---|---|
| committer | Alexander M Pickering <alex@cogarr.net> | 2026-02-01 13:14:32 -0600 |
| commit | 3a975db66a3711f34e8b64bb27a8eaca79fdeca9 (patch) | |
| tree | fcc12f8f9d638ff575c1963796de76b7628854b4 /src/rng.moon | |
| download | ggj26-3a975db66a3711f34e8b64bb27a8eaca79fdeca9.tar.gz ggj26-3a975db66a3711f34e8b64bb27a8eaca79fdeca9.tar.bz2 ggj26-3a975db66a3711f34e8b64bb27a8eaca79fdeca9.zip | |
Diffstat (limited to 'src/rng.moon')
| -rw-r--r-- | src/rng.moon | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/rng.moon b/src/rng.moon new file mode 100644 index 0000000..d7606f9 --- /dev/null +++ b/src/rng.moon @@ -0,0 +1,46 @@ +-- Contains pseudo-random number generators, and some helper functions + +rng = {} +totally_random_seed = tonumber(os.date("%Y%H%M%S")) +math.randomseed(totally_random_seed) + +-- same syntax as math.random, if m and n are passed, they are lower and upper bounds +-- if only m is passed, it is the upper bound +-- if neither is passed, between 0 and 1 +-- Example: +-- local rng = require("rng") +-- local generator1 = rng.generator() +-- local random1 = generator1() +-- local generator2 = rng.generator() +-- local random2 = generator2() +-- assert(random1, random2) +rng.generator = (seed, m, n) -> + seed = seed or tonumber(os.date("%Y%S")) + co = coroutine.wrap(() -> + while true + math.randomseed(seed) + if m and n + seed = math.random(m,n) + elseif m + seed = math.random(m) + else + seed = math.random() + coroutine.yield(seed) + ) + co, seed + +rng.randomstring = (charset, length) -> + t = {} + charset_len = #charset + for i = 1, length + char = math.random(charset_len) + t[i] = charset\sub(char,char) + table.concat(t) + +rng.hexstring = (length) -> + rng.randomstring("0123456789ABCDEF", length) + +rng.numstring = (length) -> + rng.randomstring("0123456789", length) + +rng |
