Aleatório
Números aleatórios com seed, calculados dentro do script (sem ida e volta a cada chamada). A mesma seed dá os mesmos resultados, então um script pode ser executado de novo, desfeito e refeito, ou compartilhado, e ter sempre a mesma aparência. Prefira estas funções a math.random, que muda a cada execução. Os geradores são objetos: chame seus métodos com dois-pontos (rng:int(1, 6)). (11 funções)
app.random.hash(x, y, seed?) — pura
Um float sem estado em [0, 1) a partir de entradas inteiras (um hash de avalanche inteiro): o mesmo (x, y, seed) sempre dá o mesmo valor, em qualquer ordem. Para ruído por pixel ou dithering sem um gerador.
x(number) — Inteiro (arredondado para baixo).y(number) — Inteiro (arredondado para baixo).seed(number, opcional) — Padrão 0.
Retorna (number): Um float, 0 <= x < 1.
app.random.new(seed) — pura
Cria um gerador aleatório com seed (mulberry32, o mesmo algoritmo que o spray e o embaralhar do editor usam). A mesma seed sempre dá a mesma sequência. Prefira-o a math.random, que é diferente a cada execução. Use os métodos com dois-pontos: local rng = app.random.new(app.config.seed); rng:int(1, 6).
seed(number) — Um inteiro 0-4294967295. Floats são arredondados para baixo; qualquer outra coisa é reduzida a 32 bits.
Retorna (table): Um objeto gerador; chame seus métodos com dois-pontos.
app.random.seed() — pura
Uma seed inteira aleatória nova, 0-4294967295. NÃO é determinística: muda a cada execução, então imprima-a ou guarde-a se quiser reproduzir o resultado. Use-a quando o usuário deixar o campo de seed vazio: app.random.new(app.config.seed or app.random.seed()).
Retorna (number): Um inteiro 0-4294967295.
rng:chance(p) — pura
true com probabilidade p.
p(number) — Probabilidade 0-1.
Retorna (boolean): true ou false.
rng:fork(label) — pura
Um gerador filho independente, derivado de forma determinística do estado atual deste gerador e do rótulo, SEM avançar este. Dê a cada recurso o seu próprio fork (rng:fork("leaves")) para que adicionar um recurso não altere todos os sorteios seguintes. Fazer fork duas vezes no mesmo ponto com o mesmo rótulo dá filhos idênticos.
label(string) — Uma string ou um número que nomeia o filho.
Retorna (table): Um objeto gerador; chame seus métodos com dois-pontos.
rng:int(lo, hi) — pura
Um inteiro aleatório de lo a hi, ambos incluídos.
lo(number) — Menor resultado (arredondado para baixo).hi(number) — Maior resultado, inclusive (arredondado para baixo); pelo menos lo.
Retorna (number): Um inteiro, lo <= x <= hi.
rng:next() — pura
O próximo float em [0, 1).
Retorna (number): Um float, 0 <= x < 1.
rng:normal(mean?, sd?) — pura
Um float com distribuição normal (Box-Muller). Usa dois sorteios por chamada.
mean(number, opcional) — Padrão 0.sd(number, opcional) — Desvio padrão; padrão 1.
Retorna (number): Um float em torno de mean.
rng:pick(list) — pura
Um elemento aleatório da lista; nil para uma lista vazia (e o gerador não avança).
list(table) — Uma lista (1..#list).
Retorna (table): Um elemento da lista, ou nil.
rng:range(a, b) — pura
Um float aleatório de a até b (sem incluir b).
a(number)b(number)
Retorna (number): Um float em [a, b).
rng:shuffle(list) — pura
Uma nova lista com os mesmos elementos em ordem aleatória (Fisher-Yates). A lista de entrada não é alterada.
list(table) — Uma lista (1..#list).
Retorna (table): Uma nova lista embaralhada.
Em Markdown: random.md.