introduction
Vous obtenez un générateur d'entiers aléatoires avec l'implémentation suivante
- La première invocation renvoie toujours 1.
- La deuxième invocation renvoie un entier aléatoire compris entre 1 et 2.
- La troisième invocation renvoie un entier aléatoire compris entre 1 et 3.
- La nième invocation renvoie un entier aléatoire compris entre 1 et n, inclus.
Sur la base de la fonction ci-dessus, écrivez un générateur de dés aléatoire parfaitement aléatoire, renvoyant une valeur comprise entre 1 et 6 (inclus) avec une probabilité égale.
Règles
- Votre programme / fonction doit résulter en un entier aléatoire compris entre 1 et 6, inclus, sous une forme utilisable, c'est-à-dire vers une sortie standard ou comme valeur de retour de fonction.
- Le générateur de nombres aléatoires ascendants ci-dessus peut être défini comme une fonction "libre" dans votre programme (c'est-à-dire qu'il ne compte pas dans le nombre de caractères), ou un script / programme distinct qui est exécuté selon les besoins, en supposant que l'état (
n
) est persistant entre les appels. - Supposons que pas plus de 1000 lancers de dés ne seront jamais demandés dans un seul cas d'utilisation de votre programme, et le générateur de nombres aléatoires initial peut être réinitialisé
1
à la fin de 1000 lancers de dés pour éviter un débordement den
. - Votre programme ne peut utiliser aucune autre source de nombres aléatoires à l'exception du générateur aléatoire ascendant défini ci-dessus. Vous pouvez bien sûr demander plusieurs nombres aléatoires au générateur de nombres aléatoires pour chaque sortie de jet de dés.
- Il s'agit de code-golf, donc le gagnant est la réponse la plus courte ou la plupart des votes en cas d'égalité. Si vous pouvez générer 1000 lancers de dés en utilisant moins de 1000 nombres aléatoires générés, offrez-vous un bonus d'efficacité de 10 points .
Exemple
./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
illégal ou ne fonctionne-t-il pas? Je peux mal comprendre la troisième règle.