Diejenigen unter Ihnen, die Numberphile mögen, kennen Dr. James Grime, der auf seinem Kanal ein nicht-transitives Würfelspiel beschrieben hat .
Das Spiel besteht aus drei Würfeln mit 6 Gesichtern:
- Die 1: 3,3,3,3,3,6
- Die 2: 2,2,2,5,5,5
- Die 3: 1,4,4,4,4,4
Jeweils zwei Spieler wählen einen Würfel aus. Sie würfeln sie und der höhere Würfel gewinnt, das Beste von allem.
Wahrscheinlich schlägt Würfel 1 Würfel 2 mit einer Chance von> 50%. In ähnlicher Weise schlägt die 2 die 3 und interessanterweise die 3 die 1.
Schreiben Sie ein Programm Mitnahmen 1
, 2
oder 3
als Eingabe. Dies zeigt den Würfel an, den der Benutzer auswählt. Das Programm wählt dann den Würfel, der den Benutzer schlagen würde, und gibt die Ergebnisse von 21 Würfeln aus, und " Computer/User wins with x points
"
Regeln
- Code-Golf, Stimmen als Tiebreaker
- Sie müssen RNG (oder ähnliches) verwenden, um die Würfelwürfe tatsächlich zu simulieren.
- Ich bin nicht zu streng im Ausgabeformat. Es ist in Ordnung, solange Sie die Würfel zeigen, sich irgendwie zwischen den 21 Würfeln trennen (anders als Sie die Würfel in demselben Wurf trennen) und den obigen Satz ausgeben.
- Die Eingabe kann stdin, Befehlszeilenargument, vom Bildschirm usw. sein.
Beispiel
Eingang
1
Ausgabe
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 6
1 3
4 3
4 3
1 3
4 3
1 3
4 3
4 3
4 3
4 3
4 6
Computer wins with 16 points
Hier wählt der Benutzer Würfel 1 und seine Rollen werden in der rechten Spalte angezeigt. Das Programm wählt Würfel 3 und schlägt ihn.
|Z-21×X
die sich die Anzahl derR - 228
Beispiellauf:
quelle
summary.factor
mittable
, Speichern 9 Zeichen.Mathematica
208172166159Zur Verdeutlichung hinzugefügte Leerzeichen
quelle
Ruby 1,8, 165
getc
Ruft den ASCII-Wert der Eingabe ab (nur Ruby 1.8), der glücklicherweise Modulo 3 zu seinem ganzzahligen Wert kongruent ist.s
Beginnt bei 21,s.times{code}
wird alsocode
21 Mal ausgeführt und gibt 21 zurück. Bei jeder Iteration addiert oder subtrahiert die Schleife 1 von s, je nachdem, wer gewinnt. Wir können also sehen, wer gewonnen hat, indem wir sehen, obs
es unter 21 gelandet ist , aber dann brauche ich den ungeschickten Ausdruck[s/=2,21-s].max
, um die tatsächliche Anzahl von Punkten zu extrahieren. Ich wollte schon lange mit dem Rückgabewert von rechnen<=>
, also bin ich trotzdem glücklich.quelle
Mathematica
234247Code
Verwendungszweck
Erläuterung
n
ist die Zahl 1, 2 oder 3, die dem Würfel des Spielers entspricht. Da n auch den Würfel des Computers bestimmt (aber nicht gleich ist), können wir alle möglichen Würfelwürfe erzeugen, wenn n = 1, n = 2, n = 3. Wir können auch ihre jeweiligen Wahrscheinlichkeiten bestimmen.Untersuchen Sie die Daten direkt nach
RandomChoice
:Wenn der Spieler Würfel 1 zieht, sind die folgenden 4 Paare die einzig möglichen Ergebnisse
{{3, 1}, {3, 4}, {6, 1}, {6, 4}}
Die jeweiligen Wahrscheinlichkeiten dieser Paare sind
{5, 25, 1, 5}/36
, das ist,{5/36, 25/36, 1/36, 5/36}
RandomChoice[<data>, 21]
gibt 21 Würfe der beiden Würfel aus.quelle
C,
205191Liest die Auswahl des Benutzers von stdin.
quelle
for(c=51-getchar(p=0);
,printf("%ser wins
), ordnen Sie den Ausdruck zunächst neur
an(
und sparen Sie Platz.(c+1)%3
-> statisch-~c%3
machenp
(auf 0 initialisiert),{}
nachher entfernenfor
(;
->,
in ihnen),p<11?:
zweimal innerhalb verwenden,printf
anstatt zuzuweisenp,q
.s,q
die Schleife festlegenprintf
und anschließend inkrementierenp
, um Klammern zu speichern. Ändern Sie auch diec
Zuordnung zu verwenden%3
oder%7
geben Sie eine andere Reihenfolge von 0,1,2 an.Faktor
Mit enthält: 388
Ohne: 300
Ja, Factor ist nicht wirklich die Sprache, die man beim Golfen verwenden sollte, aber es ist schön.
quelle
Python 182
quelle
R 206
quelle