Yahtzee ist ein Spiel, das mit fünf sechsseitigen Würfeln und einem Punktebogen mit dreizehn verschiedenen Feldern gespielt wird, um eine Punktzahl auszufüllen. Jedes Feld hat seine eigenen Bewertungsregeln:
- 1s, 2s, 3s, 4s, 5s, 6s - alle Punkte entsprechen der Summe der jeweiligen Würfel (dh ein Wurf von [3, 2, 3, 1, 5], der als 3s gewertet wird, wird mit 6 Punkten bewertet: 3 für jeweils 3).
- 3-of-a-kind und 4-of-a-kind (so wie sie klingen, haben drei oder vier Würfel das gleiche Ergebnis erzielt) entsprechen der Summe aller fünf Würfel.
- Full House (zwei Würfel zeigen einen Wert, die anderen drei zeigen einen anderen) erhält 25 Punkte
- Kleine Gerade (vier aufeinanderfolgende Werte) bringt 30 Punkte
- Große Straße (alle aufeinanderfolgenden Werte) bringt 40 Punkte
- Yahtzee (alle Würfel zeigen den gleichen Wert) erhält 50 Punkte
Der dreizehnte (Zufall) macht im Spiel Sinn, aber nicht so sehr für diese Herausforderung; Zusätzlich bietet das Spiel Boni für zusätzliche Yahtzees, die hier keinen Sinn ergeben. Weil die Herausforderung ist ...
Bei fünf Würfeln als Eingabe (fünf Ganzzahlen von 1 bis 6, Eingabe ist jedoch praktisch, Sie können davon ausgehen, dass die Eingabe immer gültig ist), wird die höchstmögliche Punktzahl für diese 'Hand' ausgegeben. Für die Zwecke dieser Herausforderung sind nur die Bewertungsmethoden in der obigen Liste gültig (insbesondere ist der Zufall keine gültige Bewertungsbox für diese Herausforderung). Die Bewertung sollte als dezimaler numerischer Wert ausgegeben werden, unabhängig davon, ob es sich um eine Ganzzahl oder eine Zeichenfolgendarstellung handelt. Es sollte sofort als Zahl erkennbar sein. Führende / nachfolgende Leerzeichen sind in Ordnung, hier geht es darum, die Punktzahl und nicht die Präsentation zu erhalten.
Code Golf, also gewinnt die Antwort mit den wenigsten Bytes in einer gegebenen Sprache. Standardlücken verboten.
Testfälle
(Beachten Sie, dass diese alle unabhängig voneinander sind. Die Herausforderung besteht darin, eine Hand Würfel zu erzielen. )
in: 1 5 4 3 2
out: 40
in: 1 1 4 3 1
out: 10
in: 2 2 6 5 3
out: 6
in: 2 4 2 4 6
out: 8
in: 1 1 1 1 1
out: 50
in: 5 2 5 3 6
out: 10
in: 1 6 3 4 2
out: 30
in: 1 3 1 1 3
out: 25
in: 6 5 5 6 6
out: 28
in: 1 2 3 5 6
out: 6
Antworten:
R ,
146141 BytesProbieren Sie es online!
Vom Plannapus überfordert
Nimmt Eingaben als Liste und gibt die Punktzahl zurück.
etwas ungolfed:
quelle
f(c(1,2,3,5,6))
scheitert - es sollte 6 ergeben und ergibt stattdessen 30. Es scheint, dass Sie zählen, wie viele Paare (Nachsortierung) sich um eins unterscheiden, was in der obigen Sequenz vier ist, obwohl es keine Gerade ist von vier. Ich glaube, ich bin vorPython 2 ,
187184167165 Bytes-17 Bytes dank @mypetlion
-2 Bytes dank @chrstphrchvz
Probieren Sie es online!
quelle
R,
136134 Bytes2 Bytes weniger dank @Giuseppe !
Eingerückt,
Einige Testfälle:
quelle
factor
eine heiße Sekunde, bevor ich abgelenkt wurde. Aber ich denke, wenn ich Ihren Ansatz mitz
(s
in meiner Antwort) verwende, kann ich bis auf 134 Golf spielen ...all(y<4&y-1)
und*
anstelle von[
undy
inline anstatt als Funktionsargument verwenden und festlegen, und trotzdem alle Testfälle bestehen: Probieren Sie es online aus!max
und ich denke, es hat das Byte vor demy
Inline- Setzen gerettet .Batch, 359 Bytes
Erläuterung:
Berechnen Sie die Anzahl der Würfel für jede Zahl plus das Maximum plus die Summe aller Würfel plus die höchste Summe der Würfel derselben Zahl.
Wenn alle Würfel unterschiedlich sind, kann dies eine lange Straße sein, aber es muss entweder keine
1
oder keine geben6
.Andernfalls oder wenn höchstens zwei Würfel gleich sind, könnte dies immer noch eine kurze Straße sein. Es muss mindestens ein
3
und ein4
und auch eine Kombination der anderen vier Zahlen geben.Wenn es drei gleiche Würfel gibt, prüfen Sie, ob das Haus voll ist
3^2==1
. Einige volle Häuser, wie z. B. 6er und 5er, erzielen jedoch eine höhere Punktzahl als 3er.Andernfalls oder wenn vier gleich sind, wird die Gesamtsumme gewertet.
Und wenn es fünf sind, dann Yahtzee!
Die beste Punktzahl ausgeben.
quelle
Jelly , 58 Bytes
Probieren Sie es online!
quelle
25.0
während kein anderer Fall das Nachsehen hat.0
?2.5 × 10 = 25.0
(float Arithmetik), während die andere wie30
wie gefolgert werden3 × 10 = 30
(Integer - Arithmetik).× 10
es sich um 2 Bytes handelt, entspricht dies2.5
2 Bytes25
und es werden3,5,4
3 Bytes30,50,40
gespeichert, sodass 3 + 0 - 2 = 1 Byte gespeichert werden.Perl 6 , 159 Bytes
Probieren Sie es online!
Da Eingaben akzeptiert werden können, "die jedoch bequem sind", nimmt meine Funktion sie als eine Instanz der
Bag
Klasse, bei der es sich um einen Container mit einer Vielzahl handelt. ABag
ist auch ein assoziativer Container;$bag{$key}
Gibt zurück, wie oft$key
in der Tasche vorkommt.Der Hauptteil der Funktion ist nur eine Liste von Funktionen, die jede mögliche Yahtzee-Hand auswerten und die Punktzahl für diese Hand oder Null zurückgeben, wenn die Bedingungen für die Hand nicht erfüllt sind.
|(1..6).map({ *{$_} * $_ })
ist eine Liste von sechs Funktionen, die Hände basierend auf wiederholten Läufen der Nummern 1-6 bewerten. Der Anführer|
verflacht diese Liste in der umgebenden Liste.{.kxxv.sum * ?.values.grep(* > 2) }
bewertet die 3- und 4-of-a-kind Hände..kxxv
bei a werdenBag
die schlüssel mit der multiplizität der einzelnen wiederholt, wobei die ursprüngliche liste der würfelwürfe wiederhergestellt wird und.sum
natürlich die würfel addiert werden. Diese Summe wird mit einem booleschen Wert (?
) multipliziert. Dies ist der Fall, wenn der Beutel.values
(dh die Multiplizitäten) einen Wert größer als 2 enthält.{ 25 * (6 == [*] .values) }
wertet die Full House Hand aus. 25 wird mit einem booleschen Wert multipliziert, der wahr ist, wenn das Produkt der Multiplizitäten 6 ist, was für fünf Würfel nur passieren kann, wenn einer 3 und der andere 2 ist.30 * ?*{ 3 & 4 & (1 & 2 | 2 & 5 | 5 & 6) }
wertet die kleine gerade Hand aus. Es ist eineWhateverCode
Funktion; der zweite stern*
ist derBag
. Der Ausdruck zwischen den geschweiften Klammern ist die Verknüpfung der Werte 3 und 4 und entweder 1 und 2 oder 2 und 5 oder 5 und 6. Wenn Sie diese Verknüpfung in denBag
Ergebnissen nachschlagen, erhalten Sie eine Verknüpfung der entsprechenden Multiplizitäten. Wenn die Multiplizitäten von 3 und 4 und mindestens eine von 1 und 2 oder 2 und 5 oder 5 und 6 ungleich Null sind, ist die Verknüpfung wahr, wenn sie zu einem Booleschen Wert (mit?
) gezwungen wird , und dieser Boolesche Wert wird mit 30 multipliziert um die Punktzahl zu bekommen.40 * ?*{ 2 & 3 & 4 & 5 & (1 | 6) }
Ebenso bewertet die große gerade Hand. Es ist einfacher, weil die Würfel jede der Zahlen 2-5 und entweder 1 oder 6 enthalten müssen.50 * (*.keys == 1)
bewertet die Yahtzee Hand. Es ist einfach das 50-fache eines Booleschen Wertes, was wahr ist, wenn die Anzahl der unterschiedlichen Würfel eins ist.quelle
Pip ,
6563 BytesNimmt die Würfel als fünf Befehlszeilenargumente. Probieren Sie es online!
Ungolfed + Erklärung
(Dies ist die Originalversion.)
quelle
Ruby , 184 Bytes
Volles Programm. Um das Testen der Eingabe zu vereinfachen, fügen Sie die Zeichen
$/=' '
oben hinzu, um das Format "Durch Leerzeichen getrennte Ziffer" einzulesen. (191 Zeichen)Ich habe die 200-Byte-Barriere durchbrochen und es geschafft, sie mit Leichtigkeit mit einem Dutzend verbleibender Bytes zu zerstören!
Probieren Sie es online!
Erläuterung
Nicht sehr gut. Hoffe du hast etwas Ruby Wissen ~
quelle