# API de scripting Lua de pxstud.io — Aleatorio

> Parte de la referencia de scripting Lua de pxstud.io, cuya introducción (https://pxstud.io/es/docs/scripting.md) explica sus convenciones. Los grupos de opciones y los tipos a los que remite están en https://pxstud.io/es/docs/scripting/option-groups.md y https://pxstud.io/es/docs/scripting/types.md. Todo en un solo archivo (en inglés): https://pxstud.io/llms-full.txt. El índice de todo el sitio (en inglés): https://pxstud.io/llms.txt.

### Aleatorio
Números aleatorios con semilla, calculados dentro del script (sin ida y vuelta por cada llamada). La misma semilla da los mismos resultados, así que un script se puede volver a ejecutar, deshacer y rehacer, o compartir, y verse idéntico. Prefiérelos a math.random, que cambia en cada ejecución. Los generadores son objetos: llama a sus métodos con dos puntos (rng:int(1, 6)).

#### `app.random.hash(x, y, seed?)` — pura
Un número de coma flotante sin estado en [0, 1) a partir de entradas enteras (un hash de avalancha de enteros): el mismo (x, y, seed) siempre da el mismo valor, en cualquier orden. Para ruido por píxel o tramado sin un generador.

- `x` (number) — Entero (se redondea hacia abajo).
- `y` (number) — Entero (se redondea hacia abajo).
- `seed` (number, opcional) — Por defecto 0.

Devuelve (number): Un número de coma flotante, 0 <= x < 1.

#### `app.random.new(seed)` — pura
Crea un generador aleatorio con semilla (mulberry32, el mismo algoritmo que usan el aerógrafo y la mezcla del editor). La misma semilla siempre da la misma secuencia. Prefiérelo a math.random, que es distinto en cada ejecución. Usa los métodos con dos puntos: local rng = app.random.new(app.config.seed); rng:int(1, 6).

- `seed` (number) — Un entero 0-4294967295. Los decimales se redondean hacia abajo; cualquier otro valor se reduce a 32 bits.

Devuelve (table): Un objeto generador; llama a sus métodos con dos puntos.

#### `app.random.seed()` — pura
Una semilla entera aleatoria nueva, 0-4294967295. NO es determinista: cambia en cada ejecución, así que imprímela o guárdala si quieres reproducir el resultado. Úsala cuando el usuario deje vacío el campo de semilla: app.random.new(app.config.seed or app.random.seed()).

Devuelve (number): Un entero 0-4294967295.

#### `rng:chance(p)` — pura
true con probabilidad p.

- `p` (number) — Probabilidad 0-1.

Devuelve (boolean): true o false.

#### `rng:fork(label)` — pura
Un generador hijo independiente derivado de forma determinista del estado actual de este generador y de la etiqueta, SIN hacer avanzar a este. Dale a cada función su propia bifurcación (rng:fork("leaves")) para que añadir una función no cambie todas las tiradas posteriores. Bifurcar dos veces en el mismo punto con la misma etiqueta da hijos idénticos.

- `label` (string) — Una cadena o un número que nombra al hijo.

Devuelve (table): Un objeto generador; llama a sus métodos con dos puntos.

#### `rng:int(lo, hi)` — pura
Un entero aleatorio de lo a hi, ambos incluidos.

- `lo` (number) — El resultado más pequeño (se redondea hacia abajo).
- `hi` (number) — El resultado más grande, incluido (se redondea hacia abajo); al menos lo.

Devuelve (number): Un entero, lo <= x <= hi.

#### `rng:next()` — pura
El siguiente número de coma flotante en [0, 1).

Devuelve (number): Un número de coma flotante, 0 <= x < 1.

#### `rng:normal(mean?, sd?)` — pura
Un número de coma flotante con distribución normal (Box-Muller). Usa dos tiradas por llamada.

- `mean` (number, opcional) — Por defecto 0.
- `sd` (number, opcional) — Desviación estándar; por defecto 1.

Devuelve (number): Un número de coma flotante alrededor de mean.

#### `rng:pick(list)` — pura
Un elemento aleatorio de la lista; nil para una lista vacía (y el generador no avanza).

- `list` (table) — Una lista (1..#list).

Devuelve (table): Un elemento de la lista, o nil.

#### `rng:range(a, b)` — pura
Un número de coma flotante aleatorio desde a hasta b (sin incluirlo).

- `a` (number)
- `b` (number)

Devuelve (number): Un número de coma flotante en [a, b).

#### `rng:shuffle(list)` — pura
Una lista nueva con los mismos elementos en orden aleatorio (Fisher-Yates). La lista de entrada no se modifica.

- `list` (table) — Una lista (1..#list).

Devuelve (table): Una lista nueva mezclada.
