Hearts ist ein trickreiches Kartenspiel für 4 Spieler. Jeder Stich wird von dem Spieler ausgeführt, der die höchste Karte der führenden Farbe gespielt hat. Am Ende jeder Hand erhalten die Spieler eine Strafpunktzahl, abhängig von den Strafkarten, die sie genommen haben. Die Aufgabe besteht darin, die Punktzahlen gemäß den Microsoft Hearts- Regeln zu ermitteln.
Eingang
Die Eingabe besteht aus 4 Listen (oder einer begrenzten Zeichenfolge, einem Array usw.) mit den Strafkarten, die von jedem der 4 Spieler gezogen wurden. Die Strafkarten sind
2♥, 3♥, 4♥, 5♥, 6♥, 7♥, 8♥, 9♥, 10♥, J♥, Q♥, K♥, A♥, Q♠
was wir als darstellen werden
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 0
beziehungsweise.
Ausgabe
Ausgabe sind die 4 Strafpunkte, die die 4 Spieler erhalten (Liste, Zeichenfolge, Array usw.). Die Wertung lautet wie folgt:
- Jedes Herz (
♥
dargestellt durch ganze Zahlen1
bis13
einschließlich) erhält 1 Punkt - Die Pik Dame (
Q♠
vertreten durch0
) erhält 13 Punkte - Ausnahme: Hat ein Spieler alle Strafkarten (als Mondschießen bezeichnet) genommen, erhält er 0 Punkte, während alle anderen Spieler 26 Punkte erhalten.
Testfälle
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13] --> 4, 2, 0, 20
[0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [], [], [1] --> 25, 0, 0, 1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0], [], [], [] --> 0, 26, 26, 26
Kürzester Code in Bytes gewinnt.
quelle
_26&1b
. -2 Bytes.1b
... Ich habe versucht , einen kurzen Weg zu finden, biegen Sie[26]
in26
und[]
in ,0
aber irgendwie , das nicht zu mir kommen. Vielen Dank :)R
85 7774 BytesUnbenannte Funktion, die eine R-Liste als Eingabe verwendet. Zählt die Anzahl der Elemente
>0
und fügt 13 hinzu, wenn sich ein Element in jedem Vektor befindet<1
(dh Pik Dame) und speichert alsz
.Wenn ein Element in
z
ist>25
, kehre zurück26-z
, sonst kehre zurückz
.Probieren Sie es auf R-Geige
quelle
26-z
funktionierenC ++ 14, 158 Bytes
Als unbenannter Lambda:
Benötigt ein
vector<vector<int>>
und kehrt zurückvector<int>
Ungolfed:
Einige Testfälle für Sie:
quelle
Python 2,
757271 BytesÜbernimmt die Eingabe als
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13]
quelle
12*(0in a)
.print[[x,26-x][26in i]for x in i]
ist ein Byte kürzer.PHP, 113 Bytes
Funktion nimmt ein Array von Arrays, gibt ein Array von Werten zurück.
Bewundern Sie die anderen Array-Zuordnungen in PHP: Schleifen mit Elementen, auf die verwiesen wird. Waaay kürzer als
array_map
.quelle
Haskell,
625956 BytesVerwendung:
quelle
f
alsf n=13^0^n
.f x|all(<26)x=x|0<1=map(26-)x
und Verwenden anstelle der Lambda-Funktion spart einige Bytes.05AB1E ,
262221 BytesDas nachfolgende Leerzeichen muss aus der Eingabe entfernt werden, damit es als Array interpretiert wird. Das Ende wurde von den anderen Antworten bei Verwendung von (26-x) inspiriert, wenn ein Spieler alle Strafkarten gesammelt hat.
Probieren Sie es online!
Es sieht immer noch ziemlich gut aus, mit doppelten Konstanten und bedingten Anweisungen.
Frühere Version, 26 Bytes
(Ein Byte für jeden Punkt im maximalen Strafwert)
Ich habe beschlossen, es so zu belassen, wie es meiner Meinung nach am besten zu dieser Herausforderung passt :).
Probieren Sie es online!
quelle
Python 3, 101 Bytes
Vollständiger Code:
quelle
12*(c<1)+1
ist 2 Bytes kürzer als(1,13)[c==0]
.26*(s>25)
ist 3 Bytes kürzer als(26,0)[s==26]
.JavaScript (ES6),
82807772706967 Byte2 Bytes dank @Neil gespeichert
Nervenzusammenbruch
quelle
c=>b*26^c
Spart 2 Bytes.Pip , 28 Bytes
27 Byte Code, +1 für
-p
Flag.Übernimmt die Eingabe in der Befehlszeile als Zeichenfolge, die eine verschachtelte Liste darstellt, z. B.
"[[2 8 7 1] [3 4] [] [9 5 6 0 10 11 12 13]]"
(Anführungszeichen werden in TIO nicht benötigt). Probieren Sie es online!quelle
Ruby, 59 Bytes
Oder alternativ,
Wenn nur eine Hand Karten hat, möchten wir, dass die leeren Hände einen Wert von 26 und die Hand mit Karten einen Wert von 0 erhalten. Ich rufe dazu
min
die Hände an - dies ergibtnil
ein leeres Array und dann I||
it into 26. In anderen Fällen zähle ich die Anzahl der Karten in einer Hand und addiere dann 12 zur Pik Dame.quelle
Scala, 93 Bytes
Verwendung:
Erläuterung:
Ich könnte
%toSet 26
anstelle von verwenden,% contains 26
weilSet
'sapply
Methode istcontains
und nicht wieSeq
' s Get-at-Indexquelle