createSeededRandom

Un generador aleatorio determinista con semilla: el motor detrás de los barajados reproducibles.

double Function() createSeededRandom(int seed)

Lección

createSeededRandom(seed) devuelve una función sin argumentos que produce doubles pseudoaleatorios en [0, 1). La secuencia queda completamente determinada por la semilla: dos generadores creados a partir de la misma semilla dan exactamente los mismos números, en el mismo orden, en cualquier plataforma.

Es un port del seededRandom interno de FxTS (un PRNG al estilo Mulberry32). En FxTS es privado, pero FxDart lo expone porque la aleatoriedad determinista resulta útil en muchos sitios: tests reproducibles, datos de demo estables, fuzzing basado en propiedades con fallos que se pueden reproducir, o cualquier caso donde lo que de verdad quieres es «aleatorio, pero igual en cada ejecución». Es lo que usa shuffle por debajo cuando le pasas una semilla.

A diferencia del Random(seed) de dart:math, la secuencia forma parte del contrato de la librería con FxTS: un shuffle con semilla en FxDart y en FxTS produce el mismo orden para la misma semilla.

Demo 1 · Misma semilla, misma secuencia

Demo 2 · Selecciones y barajados reproducibles

Convierte el generador en la forma aleatoria que necesites; aquí, tiradas de dados y un shuffle con semilla:

Pruébalo tú

Ejercicio: reparte dos manos «aleatorias» idénticas construyendo ambas a partir de la misma semilla.

Relacionado: shuffle — barajado con semilla construido sobre este generador · cycle & repeat — fuentes infinitas deterministas