# API de scripts Lua de pxstud.io — Aléatoire

> Fait partie de la référence de scripts Lua de pxstud.io, dont la vue d'ensemble (https://pxstud.io/fr/docs/scripting.md) explique les conventions. Les groupes d'options et les types auxquels elle renvoie se trouvent dans https://pxstud.io/fr/docs/scripting/option-groups.md et https://pxstud.io/fr/docs/scripting/types.md. Tout dans un seul fichier (en anglais) : https://pxstud.io/llms-full.txt. L'index de tout le site (en anglais) : https://pxstud.io/llms.txt.

### 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)).

#### `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.
