421 ist ein sehr beliebtes Würfelspiel in Frankreich und einigen anderen europäischen Ländern. Es wird meistens in Bars und Pubs gespielt, um zu bestimmen, wer die nächste Runde Getränke kauft. Das komplette Spiel wird normalerweise in zwei Runden gespielt, wobei jeder Spieler versucht, die Spielsteine loszuwerden, was hier jedoch nicht relevant ist. ( Wikipedia-Seite in Französisch.)
Das Spiel wird mit 3 Standardwürfeln gespielt.
Aufgabe
Ihre Aufgabe ist es, eine nicht leere Liste verschiedener 3-Würfel-Würfe [X, Y, Z] von der höchsten zur niedrigsten zu sortieren , indem Sie die Bewertungsregeln dieses Spiels anwenden.
Grundbewertung
- 4,2,1 ist die höchstmögliche Kombination. Je nach Regel kann es 8, 10 oder 11 Punkte geben. Da wir die Rollen sortieren, anstatt die Punkte zu zählen, spielt der genaue Wert keine Rolle.
- Drei Asse: 1,1,1 ist die zweithöchste Kombination und bringt 7 Punkte.
- Zwei Asse: X, 1,1 (wobei X 2 bis 6 ist) bringt X Punkte.
- Three-of-a-Kind: X, X, X (wobei X 2 bis 6 ist) bringt X Punkte.
- Straights: X, X + 1, X + 2 bringt 2 Punkte.
- Alle anderen Würfe erhalten 1 Punkt.
Krawatten schließen
Immer wenn zwei Würfe die gleiche Punktzahl ergeben, gelten folgende Regeln:
- Ein Two-Aces ist besser als ein Three-of-a-Kind. Beispiel: 5,1,1 Schläge 5,5,5 .
- Der Three-of-a-Kind 2,2,2 ist besser als eine Straße. Beispiel: 2,2,2 schlägt 4,5,6 .
- Die Geraden werden von der niedrigsten zur höchsten geordnet. Beispiel: 4,5,6 Schläge 2,3,4 .
- Alle anderen Würfe werden durch Sortieren der Würfel vom höchsten zum niedrigsten Wert abgerechnet. Beispiel: 6,5,2 schlägt 6,4,3 . (Daher ist die niedrigstmögliche Kombination im Spiel 2,2,1 .)
Nachfolgend sind die 56 möglichen unterschiedlichen Rollen aufgeführt, die vom höchsten zum niedrigsten sortiert sind:
421 111 611 666 511 555 411 444 311 333 211 222 654 543 432 321
665 664 663 662 661 655 653 652 651 644 643 642 641 633 632 631
622 621 554 553 552 551 544 542 541 533 532 531 522 521 443 442
441 433 431 422 332 331 322 221
Herausforderungsregeln
- Sie können die Würfel in jedem vernünftigen Format nehmen, z. B. in Form einer Liste von Listen
[[3,2,1],[4,2,1]]
, einer Liste von Zeichenfolgen["321","421"]
, einer Liste von ganzen Zahlen[321,421]
usw. Jeder Würfel muss jedoch mit einem Wert von 1 bis 6 eindeutig identifizierbar sein . - Bei jedem Wurf können Sie davon ausgehen, dass die Würfel entweder vom niedrigsten zum höchsten oder vom höchsten zum niedrigsten sortiert sind, sofern dies konsistent ist. Bitte geben Sie in Ihrer Antwort an, welche Bestellung Sie erwarten.
- Die kürzeste Antwort in Bytes gewinnt!
Testfälle
Verwenden von Saitenlisten mit den Würfeln von der höchsten zur niedrigsten Sortierung:
Eingänge
[ "321", "654" ]
[ "222", "321", "211" ]
[ "333", "311", "331", "111" ]
[ "111", "222", "333", "444" ]
[ "321", "421", "521", "621" ]
[ "422", "221", "442", "421", "222" ]
[ "222", "111", "421", "211", "651", "652", "543" ]
Erwartete Ergebnisse
[ "654", "321" ]
[ "211", "222", "321" ]
[ "111", "311", "333", "331" ]
[ "111", "444", "333", "222" ]
[ "421", "321", "621", "521" ]
[ "421", "222", "442", "422", "221" ]
[ "421", "111", "211", "222", "543", "652", "651" ]
012
anstelle von123
)?Antworten:
Python , 93 Bytes
Probieren Sie es online!
quelle
sort
Methode sortieren .Retina 0.8.2 , 67 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung: Der numerische Sortierschlüssel wird wie folgt generiert:
quelle
Jelly ,
3734 BytesEin monadischer Link, der eine Liste mit Listen von Würfeln akzeptiert (jeweils absteigend sortiert), wodurch die sortierten Würfel absteigend sortiert werden.
Probieren Sie es online! Oder schauen Sie sich eine Testsuite an ... oder probieren Sie alle Rollen lexikographisch sortiert aus
Wie?
Diese Methode erstellt eine Liste aller Würfe vom höchsten bis zum niedrigsten * und ersetzt sie
[4,2,1]
durch0
(ein ungültiger Eingabe-Wurf), um jeden Wurf nach Jellys erstem Atomindex zu ordneni
.* Die Liste enthält auch Wiederholungen und redundante Einträge, die das Verhalten nicht beeinflussen:
quelle
R , 73 Bytes
Probieren Sie es online!
421 ... 221
)x % 37
statt111
Erklärung:
Für jede der Zahlen werden 5 Schlüssel berechnet und hierarchisch zum Sortieren des Arrays verwendet:
quelle
05AB1E ,
764845 BytesEs stellte sich heraus, dass dies viel länger als erwartet war, aber zumindest ist es einfach zu implementieren. Mal sehen, ob ich eine bessere Lösung finden kann ..Hab die Liste jetzt von Hand gemacht, aber immer noch ein bisschen lang.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Hier ist die aktuelle Liste, die der erste Teil des Codes generiert:
Probieren Sie es online aus.
Wie Sie sehen, enthält es leere Elemente. Zahlen wie
765
oder210
; und Zahlen im Bereich[216, 112]
. Wir können diese jedoch alle ignorieren, da die Elemente, die wir sortieren möchten, in der richtigen Reihenfolge vorliegen.Ursprüngliche 76-Byte-Lösung:
Probieren Sie es online aus
oder überprüfen Sie alle Testfälle(keine Testsuite, da es immer noch einen Fehler beim Sortieren mit komprimierten Zahlen gibt, bei dem die schließende Klammer nicht angezeigt wird, um das Sortieren zu stoppen ).Erläuterung:
Erklärung
•X˜„Éε´õñ€9Ú ù?ä0₅9úd5àPÎøŒccuĆYÑ,o¾eíË¿¼À8@gID=vÆOΣxjF¨O‡J₃^εR™\èv•667в
:Alles zwischen den beiden
•
ist eine komprimierte Zahl , die mit dem folgenden Programm generiert wird:Probieren Sie es online aus.
Z>
: Nimm das Maximum der Liste + 1 (667
in diesem Fall)β
: Konvertiert die Liste von Base-667
in eine einzelne Zahl255B
: Und konvertieren Sie diese einzelne Zahl in Basis255
(unter Verwendung der Codepage von 05AB1E), sodass wir unsere komprimierte Zahl haben .Wenn Sie
667в
es verwenden, wird diese komprimierte Zahl wieder in die ursprüngliche Liste konvertiert.quelle
JavaScript (ES7), 96 Byte
Sortiert Brötchen nach den Regeln der Wertung. Erwartet eine Reihe von Zeichenfolgen mit einzelnen Rollen in absteigender Reihenfolge des Werts, z
["654"]
Probieren Sie es online!
Erläuterung
Rollenkategorien werden auf folgende Exponenten angehoben:
Ungolfed
Das geistige Auspacken der bedingten Schecks bereitet mir Kopfschmerzen, und ich bin mir sicher, dass es irgendwie noch weiter verbessert werden kann.
quelle
Javascript, 101 Zeichen, 116 Bytes (UTF-8)
Nimmt eine Reihe von Zahlen, die die Rollen darstellen, wie
[ 321, 654 ]
.Probieren Sie es online!
Erläuterung:
Ich habe die ersten 16 der 56 möglichen verschiedenen Rollen (diejenigen , die wirklich keine Reihenfolge folgen) und ich codierte sich als String:
"ƥoɣʚǿȫƛƼķōÓÞʎȟưŁ"
. Jedes Zeichen dieser Zeichenfolge entspricht den ersten 16 möglichen Würfen (ƥ
ist421
,o
ist111
, ...). Jetzt überprüfen wir für jedes der beiden Elementea
undb
des Arrays nur ihren Index anhand der Zeichenfolge. Wenn sie enthalten sind, wird der Index verwendet. Andernfalls verwenden-1
wir (der Index ist ) die Rollennummer selbst (wir subtrahieren sie von,700
um die Reihenfolge der Zeichenfolge umzukehren diejenigen, die nicht enthalten sind, dh um sie in absteigender Reihenfolge zu sortieren).quelle
Sauber ,
169102 BytesAlle oktalen Escape-Zeichen werden als ein Byte gezählt, da der Clean-Compiler sie gerne auf diese Weise verarbeitet, TIO und SE jedoch nicht, da sie nicht in UTF-8-Form vorliegen.
Probieren Sie es online!
Verwendet die Tatsache, dass alle Würfelwürfe als ganze Zahlen modulo 256 einzigartig sind.
Günstigerweise
Char
wird (meistens) als Modulo-256-Ganzzahl behandelt.quelle
Pyth , 48 Bytes
Erwartet die Eingabe als verschachteltes Array, wobei jedes Element absteigend sortiert ist. Versuchen Sie es online hier oder überprüfen alle Testfälle auf einmal hier .
quelle
05AB1E , 24 Byte
Probieren Sie es online!
Gesamtalgorithmus:
Einzelheiten:
quelle