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.