Aléatoire
Des nombres aléatoires à graine, calculés dans le script (sans aller-retour à chaque appel). La même graine donne les mêmes résultats : un script peut donc être relancé, annulé et rétabli, ou partagé, et produire un résultat identique. Préfère-les à math.random, qui diffère à chaque exécution. Les générateurs sont des objets : appelle leurs méthodes avec deux-points (rng:int(1, 6)). (11 fonctions)
app.random.hash(x, y, seed?) — pure
Un flottant sans état dans [0, 1) à partir d'entrées entières (un hash à avalanche entier) : le même (x, y, seed) donne toujours la même valeur, dans n'importe quel ordre. Pour du bruit par pixel ou du tramage sans générateur.
x(number) — Entier (arrondi à l'inférieur).y(number) — Entier (arrondi à l'inférieur).seed(number, facultatif) — 0 par défaut.
Renvoie (number) : Un flottant, 0 <= x < 1.
app.random.new(seed) — pure
Crée un générateur aléatoire à graine (mulberry32, le même algorithme que celui de l'aérosol et du brouillage de l'éditeur). La même graine donne toujours la même séquence. Préfère-le à math.random, qui est différent à chaque exécution. Utilise les méthodes avec deux-points : local rng = app.random.new(app.config.seed); rng:int(1, 6).
seed(number) — Un entier de 0 à 4294967295. Les flottants sont arrondis à l'inférieur ; toute autre valeur est réduite à 32 bits.
Renvoie (table) : Un objet générateur ; appelle ses méthodes avec deux-points.
app.random.seed() — pure
Une nouvelle graine entière aléatoire, 0-4294967295. NON déterministe : elle diffère à chaque exécution, donc affiche-la ou stocke-la si tu veux reproduire le résultat. Utilise-la quand l'utilisateur laisse le champ de graine vide : app.random.new(app.config.seed or app.random.seed()).
Renvoie (number) : Un entier de 0 à 4294967295.
rng:chance(p) — pure
true avec la probabilité p.
p(number) — Probabilité de 0 à 1.
Renvoie (boolean) : true ou false.
rng:fork(label) — pure
Un générateur enfant indépendant, dérivé de façon déterministe de l'état actuel de ce générateur et du label, SANS faire avancer celui-ci. Donne à chaque fonctionnalité son propre fork (rng:fork("leaves")) pour qu'ajouter une fonctionnalité ne change pas tous les tirages suivants. Forker deux fois au même moment avec le même label donne des enfants identiques.
label(string) — Une chaîne ou un nombre qui nomme l'enfant.
Renvoie (table) : Un objet générateur ; appelle ses méthodes avec deux-points.
rng:int(lo, hi) — pure
Un entier aléatoire de lo à hi, bornes comprises.
lo(number) — Plus petit résultat (arrondi à l'inférieur).hi(number) — Plus grand résultat, inclus (arrondi à l'inférieur) ; au moins lo.
Renvoie (number) : Un entier, lo <= x <= hi.
rng:next() — pure
Le flottant suivant dans [0, 1).
Renvoie (number) : Un flottant, 0 <= x < 1.
rng:normal(mean?, sd?) — pure
Un flottant à distribution normale (Box-Muller). Utilise deux tirages par appel.
mean(number, facultatif) — 0 par défaut.sd(number, facultatif) — Écart type ; 1 par défaut.
Renvoie (number) : Un flottant autour de mean.
rng:pick(list) — pure
Un élément aléatoire de la liste ; nil pour une liste vide (et le générateur n'avance pas).
list(table) — Une liste (1..#list).
Renvoie (table) : Un élément de la liste, ou nil.
rng:range(a, b) — pure
Un flottant aléatoire de a jusqu'à b (exclu).
a(number)b(number)
Renvoie (number) : Un flottant dans [a, b).
rng:shuffle(list) — pure
Une nouvelle liste avec les mêmes éléments dans un ordre aléatoire (Fisher-Yates). La liste d'entrée n'est pas modifiée.
list(table) — Une liste (1..#list).
Renvoie (table) : Une nouvelle liste mélangée.
En Markdown : random.md.