Einführung
Sie erhalten einen zufälligen Ganzzahlgenerator mit der folgenden Implementierung
- Der erste Aufruf gibt immer 1 zurück.
- Der zweite Aufruf gibt eine zufällige Ganzzahl zwischen 1 und 2 zurück.
- Der dritte Aufruf gibt eine zufällige Ganzzahl zwischen 1 und 3 zurück.
- Der n-te Aufruf gibt eine zufällige Ganzzahl zwischen 1 und n einschließlich zurück.
Schreiben Sie basierend auf der obigen Funktion einen Zufallswürfelgenerator, der vollkommen zufällig ist und mit gleicher Wahrscheinlichkeit einen Wert zwischen 1 und 6 (einschließlich) zurückgibt.
Regeln
- Ihr Programm / Ihre Funktion sollte zu einer zufälligen Ganzzahl zwischen 1 und 6 führen, einschließlich in einer verwendbaren Form, dh zur Standardausgabe oder als Funktionsrückgabewert.
- Der obige Generator für aufsteigende Zufallszahlen kann als "freie" Funktion in Ihrem Programm definiert werden (dh zählt nicht für Ihre Zeichenanzahl) oder als separates Skript / Programm, das nach Bedarf ausgeführt wird, vorausgesetzt, der Status (
n
) ist dauerhaft zwischen Anrufen. - Angenommen, in einem einzigen Anwendungsfall Ihres Programms werden niemals mehr als 1000 Würfelwürfe angefordert, und der anfängliche Zufallszahlengenerator kann
1
auf das Ende von 1000 Würfeln zurückgesetzt werden, um ein Überlaufen von zu vermeidenn
. - Ihr Programm verwendet möglicherweise keine andere Zufallszahlenquelle als den oben definierten aufsteigenden Zufallsgenerator. Sie können natürlich mehrere Zufallszahlen vom Zufallszahlengenerator für jede einzelne Würfelwurfausgabe anfordern.
- Dies ist Code-Golf, daher ist der Gewinner die kürzeste Antwort oder die meisten Stimmen im Falle eines Unentschieden. Wenn Sie 1000 Würfelwürfe mit weniger als 1000 generierten Zufallszahlen generieren können, geben Sie sich einen 10-Punkte-Effizienzbonus .
Beispiel
./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
illegal oder funktioniert es nicht? Ich könnte die dritte Regel falsch verstehen.