Herausforderung
Bar Dice ist ein einfaches Spiel, das in einer Bar mit Würfeln gespielt wird (daher der Name). Sie werfen 5 sechsseitige Würfel und versuchen, die beste Hand zu machen.
Die Wertung basiert auf der Ansammlung der meisten Würfel mit den gleichen Ziffern. Jede Hand muss mindestens ein einzelnes "Ass" oder ein einzelnes "Ass" enthalten, um eine gültige Hand zu sein. Asse fungieren als "Joker" und können mit jeder anderen Ziffer gepaart werden. Die Stärke der Hand eines Spielers hängt zuerst von der Anzahl der Ziffern und dann vom Wert dieser Ziffern ab. Zum Beispiel ist eine Hand (Wilds zählen) mit vier 3er besser als eine Hand mit drei 5er, aber nicht besser als eine Hand mit fünf 2er.
Aus dem Wikipedia-Artikel entnommen
Dies bedeutet, dass die Hand mit dem höchsten Rang ausschließlich aus Sechsern und Einsen besteht, und die Hand mit dem niedrigsten Rang ist jede Hand ohne eine Eins.
Ihre Herausforderung besteht darin, zwei Hände zu nehmen und denjenigen Spieler zurückzugeben, der gewonnen hat oder der unentschieden gespielt hat.
Eingang
Zwei unsortierte Listen mit 5 Zahlen zwischen 1 und 6. Jede Liste repräsentiert die Hand eines Spielers. Das Eingabeformat ist flexibel.
Ausgabe
Drei unterschiedliche, aber konsistente statische Werte (Bereiche sind nicht zulässig), die angeben, ob Spieler 1 oder Spieler 2 gewonnen hat oder ob es ein Gleichstand war. Bitte geben Sie in Ihrer Antwort an, welche Werte Sie für was verwenden. Sie können beispielsweise zurückgeben, -1
wenn P1 gewinnt, 0
wenn es ein Unentschieden ist und 1
wenn P2 gewinnt.
Regeln
- Die Eingabe ist immer gültig
- Nur die bestmögliche Punktzahl jeder Hand wird verwendet, um einen Gewinner zu bestimmen. Es gibt keine Krawattenbrecher. ZB
[1,4,4,3,3]
wird binden,[1,4,4,2,2]
anstatt die 3er und 2er als Tie-Breaker zu verwenden. - Die Ausgabe muss jedes Mal einen der 3 gewählten Werte haben. Das einfache Zuordnen aller negativen Zahlen zu
P1 Wins
ist nicht zulässig und muss normalisiert werden. - Ungültige Hände, dh solche ohne Einsen, verlieren gegen alle gültigen Hände, binden jedoch mit allen anderen ungültigen Händen. ZB
[2,2,2,2,2]
Krawatten[3,3,3,3,3]
. - Eine Hand von
[1,1,1,1,1]
zählt als gültiger 6er-Satz für Ranglistenzwecke. - Das ist Code-Golf, also gewinnt die kürzeste Anzahl an Bytes.
Beispiele
#You guys are pretty good at finding edge-cases that break things. Good job!
Input: [2,1,5,6,6], [6,2,6,6,6]
Output: P1 Wins
Input: [2,4,5,6,6], [6,2,6,6,6]
Output: Tie
Input: [1,2,3,4,5], [5,4,3,2,1]
Output: Tie
Input: [1,5,5,3,2], [5,4,1,6,6]
Output: P2 Wins
Input: [3,2,2,2,1], [4,1,3,6,6]
Output: P1 Wins
Input: [1,1,1,1,1], [6,1,1,6,6]
Output: Tie
Input: [1,3,3,4,4], [1,2,2,5,5]
Output: P2 Wins
Input: [1,3,3,5,5], [1,3,3,2,2]
Output: P1 Wins
Input: [1,3,3,3,4], [1,1,3,3,3]
Output: P2 Wins
Input: [2,2,2,6,1], [5,3,3,1,2]
Output: P1 Wins
Input: [5,5,5,1,5], [1,1,1,1,1]
Output: P2 Wins
Input: [1,1,1,1,1], [1,1,5,1,1]
Output: P1 Wins
quelle
IṠ
mitM
und Ausgabe einer Liste der Gewinner (s).Ḍ
jetzt auch überflüssig sein kann, da die Listen die gleichen wie die ganzen Zahlen sortieren.R ,
11596 Bytes-6 Bytes dank Giuseppe.
-6 Bytes dank Aaron Hayman.
-2 Bytes danke an Arnauld, der dem Ausgabeformat in seiner JavaScript-Antwort folgt .
Probieren Sie es online!
Gibt
Inf
für P1,NaN
für ein Unentschieden,-Inf
für P2 zurück.Verwendet die Hilfsfunktion,
f
die für jede Hand eine Punktzahl berechnet. Die Punktzahl ist wie folgt definiert: Seid
die Ziffer, die am häufigsten wiederholt wird, undn
die Häufigkeit, mit der sie wiederholt wird. Dann ist die Punktzahl,6*n+d
wenn es mindestens ein Ass gibt und0
wenn es keine Asse gibt. Wir müssen dann nur noch den Spieler mit der höchsten Punktzahl finden.Ungolfed:
quelle
order(l)[5]
anstelle vonmax.col(t(l),"l")
eine 96-Byte-Lösung erhalten: Probieren Sie es online!JavaScript (ES6),
97 bis90 ByteÜbernimmt die Eingabe als
(a)(b)
. Gibt+Infinity
für P1,-Infinity
für P2 oderNaN
für ein Unentschieden zurück.Probieren Sie es online!
Kommentiert
quelle
05AB1E ,
1615 Bytes-1 Byte Danke an JonathanAllan
Probieren Sie es online!
Gibt [1, 0] für P1-Siege, [1, 1] für Unentschieden und [0, 1] für P2-Siege zurück.
Anstatt die lexikografische Reihenfolge für ein 2-Tupel (Würfelzahl, Würfelwert) zu verwenden, wird die Punktzahl als 10 ** Würfelzahl * Würfelwert berechnet. Hände ohne 1 Punkte 5.
quelle
ć+
(jetzt, wo ich es sehe, kann ich nicht glauben, dass ich nicht darüber nachgedacht habe ..)! Das ist so viel besser als das, was ich versucht habe. Ich hatte eine ähnliche Idee mit°
. :) Außer dass ich schon bei 20 Bytes war und noch ein Problem für den Testfall beheben musste[[1,1,1,1,1],] [6,1,1,6,6]]
.. Also danke, dass du mir Zeit gespart hast, damit ich meinen Versuch in den Mülleimerć+
funktioniert. Meine anfängliche Idee begann mitæʒW}ʒ1KË
, aber dies wird durch das[1,1,1,1,1]
Problem getötet.ε1¢©Āy{γéθ¬sg®+°P}`.S
, aber das hat sich in der[1,1,1,1,1]
Tat auch geändert. Ihre gesamte Antwort bekam eine schöne Synergie mit demWΘ*
,6L¢
,ć+
, und°ƶ
. Vor allem die BuiltinsWćƶ
zeigen hier ihre Stärke.W
wird eigentlich nicht benötigt,6L¢¬Ā*
ist die gleiche Byteanzahl wieWΘ*6L¢
.W
ohne zu knallen und*
zeigte dann seine Stärke, aber¬
ohne zu knallen und ist dann*
im Grunde das gleiche. Die Tatsache, dass es nicht knallt, ist die Stärke, die ich angedeutet habe, um ein Byte zu sparen. Aber es ist in der Tat hauptsächlichćƶ
.Python 2 ,
858180 BytesProbieren Sie es online!
Gibt
1
für P1,0
für Unentschieden und-1
für P2 zurück.-1 Byte dank Tintenfisch
quelle
1
undin
können gehenPerl 6 ,
6049 BytesProbieren Sie es online!
Returns
More
,Same
,Less
fürP1 Wins
,Tie
,P2 Wins
.Erläuterung
quelle
T-SQL-Abfrage, 148 Byte
Tabellenvariable als Eingabe verwenden
Probieren Sie es online aus
quelle
Jelly , 21 Bytes
zerquetscht bevor ich es überhaupt von Nick Kennedy gepostet habe :)
Ein monadischer Link, der eine Liste von Spielern akzeptiert, die eine Liste von (1-indizierten) Gewinnern ausgibt.
Also P1 ist
[1]
, P2 ist[2]
und ein Unentschieden ist[1,2]
.Probieren Sie es online!
quelle
PowerShell ,
112126123121 ByteÜbernimmt die Eingabe als
(a)(b)
. Gibt-1
für P1-Sieg,1
für P2 oder0
für ein Unentschieden zurück.Probieren Sie es online!
Testfall
@( @(1,1,5,1,1), @(1,1,1,1,1), 1)
hinzugefügt.Abgerollt:
quelle
Wolfram Language (Mathematica) ,
787574 Bytes-1 Byte von Greg Martin
Probieren Sie es online!
Gibt -1 aus, wenn Spieler 1 gewinnt, 1, wenn Spieler 2 gewinnt, und 0 für ein Unentschieden.
quelle
FreeQ[#,1]
mit#~FreeQ~1
.Java 8,
244240236215199 Bytes-4 Bytes dank @someone .
-21 Bytes dank @Neil .
-16 Bytes dank @ceilingcat .
Gibt zurück,
1
wenn P1 gewinnt.-1
wenn P2 gewinnt;0
wenn es ein Unentschieden ist.Probieren Sie es online aus.
Erläuterung:
quelle
...*(c[p][1]>0?1:0)
mitc[p][1]>0?...:0
. Ich kann einen TIO-Link nicht posten, da er zu lang ist und ich ihn nicht kürzen möchte. Die ungolfed Version hat irgendwo unausgeglichene Klammern.c[p][1]>0?
Check später als Bugfix hinzugefügt , aber anscheinend ohne viel darüber nachzudenken. Danke für das -4. :)*(i<2?6:i)
? Du duplizierst nur deine Bemühungen füri=6
undi=1
. Dies kann einfach sein*i
(und die Schleife beenden, wenn Sie zu 2 kommen).9
kann auch eine magische Zahl zwischen5
und ungefähr sein32
, oder? Wenn Sie8
dann verwenden(int)Math.pow(8,(...)*i)
, können Sie stattdessen verwendeni<<3*(...)
.a->b->{int c[][]=new int[2][7],m[]=new int[2],s,p,i=5;for(;i-->0;c[1][b[i]]++)c[0][a[i]]++;for(i=7;i-->2;)for(p=2;p-->0;m[p]=s>m[p]?s:m[p])s=c[p][1]>0?i+9*(c[p][i]+(i>1?c[p][1]:0)):0;return Long.compare(m[0],m[1]);}
, dass alle Ihre Testfälle bestanden zu haben scheinen ...Gelee , 27 Bytes
Probieren Sie es online!
1 für P1, -1 für P2, 0 für Gleichstand
Erläuterung
quelle
Vorschlaghammer 0,4 , 27 Bytes
Dekomprimiert in diese Wolfram Language-Funktion:
Das ist genau das Gleiche wie meine Mathematica-Antwort .
quelle
Kohle ,
4845 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Nimmt Eingaben als Array von Arrays und Ausgaben,
-1
wenn Spieler 1 gewinnt,0
für einen Gleichstand und1
wenn Spieler 2 gewinnt. Erläuterung:Ersetzen Sie jede Hand durch die Anzahl, wie oft die Werte
6..1
in der Hand erscheinen. Die Liste ist umgekehrt, weil a) es einfacher ist, den höchsten Wert mit der höchsten Anzahl zu finden, und b) es einfacher ist, die Anzahl von1
s zu entfernen . Die Anzahl von1
s wird verdoppelt, da sie zweimal entfernt werden muss, einmal, um zu überprüfen, ob sie ungleich Null ist, und einmal, um sie zu den anderen Zählern hinzuzufügen.Addieren Sie die Anzahl von
1
s zu den Zählungen für6..2
, setzen Sie jedoch alle Zählungen auf Null, wenn die Anzahl von1
s Null war.Finden Sie für jede Hand die höchste Anzahl und den höchsten Wert mit dieser Anzahl. (Tatsächlich finden wir Wert minus,
6
da das Golfspieler ist.)Bestimmen Sie, welche Hand gewonnen hat, indem Sie die Positionen der Gewinn- und Verlusthände abziehen. (Wenn die Hände unentschieden sind, gewinnt und verliert die erste Hand. Das Ergebnis ist also
0
wie gewünscht.)quelle
C (gcc) / 32 Bit, 117 Bytes
Probieren Sie es online!
Nimmt zwei nullterminierte Integer-Arrays auf. Returns
1
,0
,-1
fürP1 Wins
,P2 Wins
,Tie
.quelle
J ,
4744 BytesProbieren Sie es online!
Inspiriert von Nick Kennedys Idee.
ungolfed
quelle
Perl 5
-MList::Util=max -pl
, 80 BytesProbieren Sie es online!
Eingang:
Jeder Spieler in einer separaten Zeile, keine Leerzeichen
Ausgabe:
1
Zeile eins gewinnt0
Krawatte-1
Zeile zwei gewinntquelle