Lassen Sie uns eine Simulation für einen Aspekt des Kartenspiels erstellen, den ich persönlich unter dem niederländischen Namen 'Oorlog' (übersetzt 'Krieg') kenne.
Wie funktioniert 'Oorlog'?
Zwei Kartenspiele (jeweils mit zwei Jokern) werden gleichmäßig auf die Anzahl der spielenden Spieler aufgeteilt. Jeder Spieler mischt seine eigenen Aktien, legt sie verkehrt herum vor sich auf und alle Spieler öffnen gleichzeitig die erste Karte der Aktie.
Der Gewinner dieses Kampfes wird durch die Werte der Karten bestimmt, die diesen Regeln folgen: Joker / Ass besiegt König; König besiegt Königin; Königin besiegt Jack; Jack besiegt 10; 10 Niederlagen 9; .... Außerdem besiegen 2 und 3 Ace / Joker. Die letzte Regel kann zu einem Zyklus führen, in dem 2 oder 3 Ass oder Joker, Ass oder Joker eine andere Karte schlagen, die wiederum die 2 oder 3 schlägt. In diesem Fall gewinnt die 2 oder 3 den Kampf.
(Anzug ist in diesem Kartenspiel irrelevant.)
Wenn zwei oder mehr Spieler die gleichen höchsten Karten haben, haben sie einen "Krieg". Dies bedeutet, dass sie eine Karte verkehrt herum ablegen und dann jeweils eine neue Karte aus ihrem Vorrat aufschlagen, um erneut zu ermitteln, wer die höchste Karte hat. Dies wird fortgesetzt, bis ein einzelner Spieler die gesamte Schlacht gewonnen hat.
(Alle Karten dieses Kampfes werden auf den Ablagestapel des Spielers gelegt, der den Kampf gewonnen hat. Dann öffnet jeder eine neue Karte. Wenn die Karten eines Spielers aufgebraucht sind, dreht er seinen Ablagestapel um und setzt diesen neuen Stapel fort. Dies wird fortgesetzt, bis ein Spieler keine Karten mehr hat und der Spieler mit der höchsten Anzahl an Karten gewinnt.)
Beispiel 'Schlachten' mit drei Spielern:
- 4, 8, Jack:
Jack gewinnt. - 7, Ass, Dame:
Ass gewinnt. - 10, 10, König:
König gewinnt. - 3, Joker, 2:
3 gewinnt. - Ass, Joker, 2:
2 gewinnt. - 3, Dame, Ass:
3 Siege. - Königin, Königin, 9:
Königin & Königin haben einen 'Krieg', also geht es weiter mit zwei neuen Karten: 4, 8;
8 gewinnt. - 4, 4, 4:
Alle haben einen "Krieg", also geht es mit drei neuen Karten weiter: 8, Ass, 2;
2 gewinnt. - Jack, 5, Jack:
Jack & Jack haben einen "Krieg", also geht es mit zwei neuen Karten weiter: 5, 5;
5 & 5 sind auch gleich, so dass der 'Krieg' mit zwei neuen Karten fortgesetzt wird: 10, König;
König gewinnt. - Joker, Joker, Ass:
Alle haben einen "Krieg", also geht es mit drei neuen Karten weiter: 9, 7, 9;
9 & 9 sind auch gleich, so dass der "Krieg" mit zwei neuen Karten fortgesetzt wird: Jack, 3;
Jack gewinnt.
Also, auf die Code-Herausforderung:
Eingang:
STDIN mit einem Array oder einer Zeichenfolge, die ein Array simuliert (Ihr Aufruf - auch wenn Ihre Sprache Arrays unterstützt). Dieses Array enthält die Karten eines Kampfes in chronologischer Reihenfolge (zum besseren Verständnis siehe Testfälle).
Ausgabe:
STDOUT der Index des Spielers, der den Kampf gewonnen hat.
Sie können wählen , ob Sie eine Null-Index (dh wollen 0
, 1
oder 2
) oder ein indiziertes Ausgang (dh 1
, 2
, 3
).
Herausforderungsregeln:
- Die Eingabe ist ein einzelnes Array / eine einzelne Zeichenfolge, die ein Array darstellt. Sie können also kein Array von Arrays haben, um es zu vereinfachen. Sie können auch keine Ersatzgegenstände für Karten haben, die nicht am Krieg teilnehmen.
- Wir verwenden Nummernnotationen für die Bildkarten anstelle der Buchstabennotation. Also Ass / Joker =
1
; Jack =11
; Königin =12
; und König =13
. - Bei dieser Herausforderung können wir davon ausgehen, dass wir immer mit 3 Spielern spielen .
- Die ersten drei zeigen den Beginn der Schlacht an. Wenn zwei oder mehr Spieler einen "Krieg" haben, geben die fortlaufenden Karten im Array ihren Kampf an (siehe Testfälle für ein klareres Verständnis).
Allgemeine Regeln:
- Dies ist Code-Golf , so dass die kürzeste Antwort in Bytes gewinnt.
Dies bedeutet nicht, dass Sprachen, die nicht Code-Golf sind, nicht eingegeben werden sollten. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Code-Golf-Antwort zu finden. - Bitte geben Sie an, welche Indizierung (null- oder einsindiziert) Sie für die Ausgabe verwendet haben.
Testfälle:
Test case 1: [4, 8, 11] -> 2 (or 3)
Test case 2: [7, 1, 12] -> 1 (or 2)
Test case 3: [10, 10, 13] -> 2 (or 3)
Test case 4: [3, 1, 2] -> 0 (or 1)
Test case 5: [1, 1, 2] -> 2 (or 3)
Test case 6: [3, 12, 1] -> 0 (or 1)
Test case 7: [12, 12, 9, 4, 8] -> 1 (or 2)
Test case 8: [4, 4, 4, 8, 1, 2] -> 2 (or 3)
Test case 9: [11, 5, 11, 5, 5, 10, 13] -> 2 (or 3)
Test case 10: [1, 1, 1, 9, 7, 9, 11, 3] -> 0 (or 1)
Test case 11: [13, 13, 4, 1, 3] -> 1 (or 2)
Test case 12: [13, 4, 13, 2, 3] -> 2 (or 3)