Craps ist ein ziemlich einfaches Würfelspiel, das oft in Casinos gespielt wird. Auch wenn Sie kein Spieler sind (was ich nicht bin), ist es immer noch ein ziemlich interessantes Spiel. Hier sind die Regeln:
Zu Beginn eines Craps-Spiels gibt es eine sogenannte Come-out- Runde. Der Spieler würfelt mit zwei Würfeln (sechsseitiger Würfel) und die beiden Würfelwürfe werden addiert. Wenn das Ergebnis 7 oder 11 ist, gewinnt die Person automatisch (dies wird als natürlich bezeichnet ). Wenn das Ergebnis 2, 3 oder 12 ist, verliert die Person automatisch (dies wird als Ausscheißen bezeichnet ). Andernfalls wird das Ergebnis als Punkt für die Punktrunde festgelegt.
Danach beginnt die Punkterunde . Während der Punkterunde muss der Spieler kontinuierlich 2 W6 würfeln, bis die Person eine 7 oder ihren Punkt aus der vorherigen Runde würfelt. Wenn die Person eine 7 würfelt, verliert sie. Wenn sie ihren Punkt rollen, gewinnen sie.
Herausforderung
Implementieren Sie ein einfaches Programm, das ein Würfelspiel simuliert. Wenn die Person während der Come-Out-Runde ein Natural oder Crap-Out würfelt, sollte das Programm "Natural:" oder "Crapping out:" ausgeben, gefolgt vom Würfelwurf und dann beenden. Andernfalls sollte "Point:" gefolgt von dem Punkt ausgegeben werden. Dann sollte es während der Punktrunde jeden Würfelwurf ausgeben, bis eine 7 oder der Punkt erreicht ist. Wenn die Person gewinnt, sollte sie ausgeben "Pass"
; Wenn sie verlieren, sollte es ausgegeben werden "Don't Pass"
.
Referenzimplementierung
Groovy, 277 Bytes
def a={return Math.random()*6+1};int b=a()+a();(b<4||b==12)?{println"Crapping out: "+b}():{(b==7||b==11)?{println"Natural: "+b}():{println"Point: "+b;for(;;){int x=a()+a();println x;(x==7)?{println"Don't Pass";System.exit(0)}():{if(x==b){println"Pass";System.exit(0)}}()}}()}()
Beispielausgaben
Natural: 7
Crapping out: 3
Point: 9
4
8
11
9
Pass
und
Point: 5
3
7
Don't Pass
Das ist Code-Golf , also gewinnt der kürzeste Code.
(HAFTUNGSAUSSCHLUSS: Diese Herausforderung soll das Glücksspiel in keiner Weise fördern. Denken Sie daran, dass das Haus immer gewinnt.)
You can't make your program shorter by picking a random number between 1 and 12 for the die roll; it must be two numbers picked between 1 and 6.
- Was ist mit der Auswahl eines Zufallswerts in [1, 12] aus einer Verteilung, die mit der Addition von zwei einheitlichen Zufallswerten in [1, 6] identisch ist?Antworten:
Ruby 164
Ziemlich einfach. Interessante Funktionen:
Die Ausscheidungsfälle werden wie folgt zusammengefasst
r%12<4
und die übrigen natürlichen Fälle werden wie folgt zusammengefasstr%4==3
.Die Anfangszeichenfolge wird in gespeichert
c
und weitere Rollen werden nur dann genommen, wenn dies alphabetisch später ist als der einzelne Buchstabe?P
(der nur fürPoint
. Vorkommt).quelle
Python 3, 190 Bytes
Dies basiert auf Celeos Antwort ; Ich habe einige langwierige Bedingungen durch eine magische Zahl ersetzt, die eine LUT für jede Zahl codiert, eine Variable wiederverwendet und ein paar andere verschiedene Golfspiele durchgeführt. Noch Platz zum Golfen; es ist wahrscheinlich möglich, unter 170 zu bekommen.
Ich habe nicht versucht, Python 2 zu verwenden, daher weiß ich nicht, ob es kürzer sein würde.
quelle
C99,
366312293277 BytesDies ist mein erster Beitrag hier, also werde ich vermuten, dass dies um einiges verbessert werden kann.
Erweiterte Version
Wie Sie sehen, gibt es hier eine Menge Redundanz, die höchstwahrscheinlich beseitigt werden kann.
Wir danken @Mego für ihre Hilfe bei der Verkleinerung.
quelle
a
undb
auch die Subtraktion Methode zusammen mit Ternary Operatoren.Python 2,
226224 BytesErster Durchgang und da ist viel Code:
Danke an Mego für 2 Bytes!
quelle
PHP
230228218199192188 Bytes186 Bytes ohne die
<?
Erster Versuch, Code Golf zu spielen! Sie sind sich nicht sicher, ob die Verwendung
</br>
zulässig wäre? Da dies in einer Konsole nicht funktionieren würde (als neue Zeile). Lassen Sie mich wissen, wenn dies nicht erlaubt ist und meinen Code ändern wird.EDIT (16-8-16): Nachdem ich mich im Codegolf verbessert hatte, bemerkte ich einige mögliche Verbesserungen. Dies funktioniert immer noch über die Befehlszeilenschnittstelle. Ersetzt
</br>
mit einem harten Enter.quelle
Javascript 262
quelle
Perl 5 , 140 Bytes
Probieren Sie es online!
quelle
PowerShell ,
181183179178167165 Byte-10 Bytes dank mazzy
-2 Bytes dank Xcali
Probieren Sie es online!
Abgerollte Version:
Es gibt jetzt ein paar Punkte weniger, da die Listenerstellungslogik in einen Schalter umgebaut wurde. Ich denke, es ist immer noch ein ziemlich guter Ansatz. +2 Bytes, die einen Fehler beheben.
quelle
-notin (7,$z)
ist für die Regel nicht relevantDuring the point round, the player must continuously roll ... the previous round
. Jetzt endet die Runde, wenn$m
sie7
der ersten Runde entspricht.Come-out
Runde und das ist Ihre Zielzahl für die gesamtePoint
Runde. Dasprevious round
bezieht sich auf dieCome-out
Runde1?
Regex aus Ihrem Craps entfernen .R, 197 Bytes
Ungolfed
quelle
Pyth , 108 Bytes
Probieren Sie es online!
Erster Durchgang, kann wahrscheinlich ein paar Einsparungen finden.
quelle
Runenverzauberungen , 151 Bytes
Probieren Sie es online!
Nachdem ein Fehler in Bezug auf Zufallszahlen behoben wurde (es wurde jedes Mal
'RA
neu gesetzt, und der Startwert war die Systemzeit, was zu massiven Läufen wiederholter Werte führte), funktioniert dies korrekt.Erläuterung
Die Eingabe erfolgt in der zweiten Zeile, als erste Zeile bis
B͍
eine Funktion zum Würfeln und Summieren von zwei Würfeln ist.Programmablauf, wobei einige Kantenumbrüche und gekräuselte Umleitungen zur besseren Lesbarkeit entfernt wurden
Es gibt nur 4 NOP-Anweisungen (
{:}≠...?\.6?
), die aufgrund des in anderen Zeilen erforderlichen Platzes (dh der Länge der"Don't "
Zeichenfolge) nur sehr schwer zu entfernen wären .quelle