Einführung
Dice 10,000 ist ein Würfelspiel, das mit 6 Würfeln und etwas zum Schreiben gespielt werden kann. Die Spieler würfeln mehrmals pro Runde und erhalten am Ende eine Punktzahl. Der Spieler, der zuerst 10.000 Punkte erreicht, gewinnt das Spiel. Die Punktzahl eines Wurfs zu berechnen, ist Ihre Aufgabe bei dieser Herausforderung.
Hier finden Sie die vollständigen Regeln.
Bitte beachten Sie, dass sich die Regeln (insbesondere die Wertung) von Region zu Region ändern, da das Spiel allgemein bekannt ist. Wir verwenden die unten beschriebenen Regeln.
Die Herausforderung
Geben Sie bei einer Liste von sechs Zahlen von eins bis sechs, die einen Würfelwurf darstellen, deren Punktzahl aus. Die Punktzahl wird folgendermaßen berechnet:
- Einer zählt 100 Punkte
- Fives zählt 50 Punkte
- Drillinge zählen die Anzahl mal 100 Punkte. Drei Zweien zum Beispiel ergeben 200 Punkte. Eine Ausnahme sind drei, die 1000 Punkte zählen.
- Sechs gleiche Zahlen zählen wie zwei Drillinge, wie oben beschrieben. Sechs Dreien ergeben also 600 Punkte. Gleiches gilt für den Edge-Fall mit denen: Sechs sind 2.000 Punkte.
- Ein Würfel kann nur einmal verwendet werden. Wenn ein Würfel Teil eines Drillings ist, zählt er nicht für andere Bewertungen. Die Fünfer in einem Triplett zählen nicht 50 Punkte zusätzlich zu den 500 Punkten, die sie geben.
- Dreiergruppen werden immer zuerst gezählt, um die Punktzahl zu maximieren. Drei Fünfer zählen also nie als 150 Punkte. Vier Fünfer zählen als ein Triplett und ein gewöhnliches Fünfer, was dann 550 Punkte ergibt.
Anmerkungen
- Die Eingabe enthält immer sechs Zahlen von eins bis sechs. Sie erhalten keine ungültigen Eingaben.
- Die Nummern können in beliebiger Reihenfolge sein. Sie dürfen keine bestimmte Bestellung annehmen.
Regeln
- Das Eingabeformat bleibt Ihnen überlassen, solange es nicht vorverarbeitet wurde.
- Funktion oder Vollprogramm erlaubt.
- Standardregeln für die Eingabe / Ausgabe.
- Es gelten Standardlücken .
- Dies ist Code-Golf , also gewinnt die niedrigste Byte-Anzahl. Tiebreaker ist eine frühere Vorlage.
Testfälle
[1, 2, 3, 4, 5, 6] -> 150 [1, 1, 1, 2, 3, 5] -> 1050 [1, 1, 1, 1, 1] -> 2000 [2, 2, 2, 2, 2] -> 400 [6, 6, 1, 5, 5, 6] -> 800 [2, 3, 4, 6, 2, 4] -> 0 [1, 5, 1, 5, 1, 5] -> 1500 [5, 5, 5, 5, 2, 3] -> 550 [1, 1, 1, 1, 1, 5] -> 1250 [3, 3, 4, 4, 3, 4] -> 700
Antworten:
05AB1E ,
343130 BytesErläuterung
Probieren Sie es online aus
quelle
Python 2,
152148125 BytesZiemlich einfache Lösung. Kann mehr golfen werden.
L.count
ist ein bisschen lang, aber ich konnte den ersten Anruf nicht entfernen, da L aktualisiert wird.Online ausprobieren - (alle Testfälle)
Ungolfed:
Etwas Golfguthaben an @Copper , unter Verwendung einiger Tipps aus seinem Code
quelle
PowerShell
v2 +v3 +,147144137133 BytesDurchgestrichen 144 sieht irgendwie aus wie 144?
Nimmt Eingaben auf
$args[0]
undsort
speichert sie$n
. Dannwhile
sind noch Elemente übrig, wir werten einif
/ auselse
.Wenn das erste Element (temporär gespeichert
$x
, um einige Bytes zu speichern) mit dem dritten Element übereinstimmt, haben wir ein Tripel. In auf das$s
um das Ergebnis einer Multiplikation100*$x
plus ein Boolean-basierte900
nur , wenn$x
ist-eq
ual zu1
. Damit haben wir die Voraussetzung1000
für drei. Ziehen Sie dann die ersten beiden Elemente in$a
und ab$b
, und das verbleibende in$n
- Entfernen des dritten Elements des Tripels wird später behandelt.Ansonsten haben wir kein Triple, also addiere es zu
$s
dem Ergebnis einer anderen Booleschen Addition. Wir fügen hinzu,50
wenn$x
entweder1
oder ist5
, und fügen dann eine weitere hinzu,50
wenn dies der-eq
Fall ist1
. Dieser Abschnitt erfordert jetzt v3 + für den-in
Bediener.In beiden Fällen muss noch ein Element entfernt werden. Ziehen Sie also das erste Element ab
$a
und lassen Sie das verbleibende Element darin$n
.Sobald die Schleife fertig ist, platzieren Sie sie
$s
in der Pipeline. Die Ausgabe erfolgt implizitWrite-Output
am Ende der Ausführung.Testfälle
quelle
JavaScript (ES6),
87-86ByteSortiert und stringifiziert die Eingabe, sodass Bewertungskombinationen mithilfe von regulären Ausdrücken identifiziert werden können. Bearbeiten: 1 Byte dank @Arnauld gespeichert.
quelle
s>>7
statts>111
speichert ein Byte in der ersten VersionPython 2 oder 3,
123 122 121 116 109 108 104 102 10097 BytesPython 2, 97 Bytes
Testfälle sind auf ideone
Python 3, 97 Bytes
quelle
Ruby,
8078 BytesProbieren Sie es online!
-2 Byte von @ezrast.
quelle
i<2&&i=10
Spart Ihnen 2 Bytes.Haskell,
130123 BytesDies ist keine Herausforderung für Haskell. Ich spiele auch Golf.
Vielen Dank an @nimi.
quelle
Javascript (ES6),
8584 BytesTestfälle:
quelle
Python 3, 131 Bytes
Dies ist ein Lambda-Ausdruck; Um es zu verwenden, weisen Sie es zu, indem Sie es voranstellen
f=
.Wir prüfen zuerst zweimal nach Tripeln (indem wir den Modul verwenden) und entfernen dabei die Tripel. dann addieren wir einfach die Zählwerte von
5
und1
zur Punktzahl und geben sie zurück.Probieren Sie es auf Ideone! (mit allen Testfällen)
Hier ist meine ältere Python 2-Einsendung:
Python 2,
176172171145136134133 BytesDank @ mbomb007 wurde ein Byte in der Python 2-Lösung gespeichert!
quelle
print s
ist kürzer in Python 2.BASH (sed + bc) 161
Ich wollte alles in sed machen, aber das Hinzufügen ist wirklich schwer ...
Erläuterung:
00
die erste Zahl und entferne die andere,zB
1 2 1 3 1 4
->100 2 3 4
10
mit1
dann1
mit100
zB
100
->10
->1000
oder1
->1
->100
5
nicht gefolgt von0
mit50
0
+
+
s entfernen0
bc
um alles zu addieren.quelle
Perl, 69 Bytes
Beinhaltet +2 für
-ap
Führen Sie mit der Eingabe auf STDIN aus:
dice10000.pl
:quelle
C # (.NET Core) ,
228227 BytesProbieren Sie es online!
Ich habe das Gefühl, dass ich hier viele, viele mögliche Optimierungen verpasse, aber ich habe ein Byte gespart, indem ich am Ende mit 10 multipliziert habe. Die Eingabe sollte als separate Befehlszeilenargumente übergeben werden.
quelle
Perl 5
-ap
, 78 BytesProbieren Sie es online!
quelle