Introducción
Se le proporciona un generador de enteros aleatorio con la siguiente implementación
- La primera invocación siempre devuelve 1.
- La segunda invocación devuelve un entero aleatorio entre 1 y 2.
- La tercera invocación devuelve un entero aleatorio entre 1 y 3.
- La enésima invocación devuelve un entero aleatorio entre 1 yn, inclusive.
Con base en la función anterior, escriba un generador de dados aleatorio que sea perfectamente aleatorio, devolviendo un valor entre 1 y 6 (inclusive) con igual probabilidad.
Reglas
- Su programa / función debe dar como resultado un número entero aleatorio entre 1 y 6, inclusive, en alguna forma utilizable, es decir, a la salida estándar o como un valor de retorno de la función.
- El generador de números aleatorios ascendentes anterior se puede definir como una función "libre" en su programa (es decir, no cuenta para su recuento de caracteres), o un script / programa separado que se ejecuta según sea necesario, suponiendo que el estado (
n
) sea persistente entre llamadas. - Suponga que nunca se solicitarán más de 1000 tiradas de dados en un solo caso de uso de su programa, y el generador inicial de números aleatorios puede reiniciarse al
1
final de 1000 tiradas de dados para evitar el desbordamienton
. - Su programa no puede usar ninguna otra fuente de números aleatorios, excepto el generador aleatorio ascendente definido anteriormente. Por supuesto, puede solicitar múltiples números aleatorios del generador de números aleatorios para cada salida de tirada de dados.
- Este es el código de golf, por lo que el ganador es la respuesta más corta o la mayoría de los votos en caso de empate. Si puedes generar 1000 tiradas de dados usando menos de 1000 números aleatorios generados, obtén un bono de eficiencia de 10 puntos .
Ejemplo
./asc-rand
1 # random integer between 1 and 1
./asc-rand
1 # random integer between 1 and 2
./asc-rand
3 # random integer between 1 and 3
./asc-rand
4 # random integer between 1 and 4
# dice-gen generates random dice based on output of asc-rand program.
./dice-gen
3
./dice-gen
6
./dice-gen
5
./dice-gen
1
iterate(6):b=asc-rand(); print b
ilegal o no funciona? Podría estar malinterpretando la tercera regla.