Costruiamo una simulazione per un aspetto del gioco di carte, che conosco personalmente con il nome olandese "Oorlog" (tradotto in "Guerra").
Come funziona 'Oorlog'?
Due mazzi di carte (ciascuno con due jolly) sono equamente divisi tra il numero di giocatori che giocano. Ogni giocatore mescola il proprio mazzo, lo mette a testa in giù davanti a sé e tutti i giocatori aprono contemporaneamente la prima carta del mazzo.
Il vincitore di quella "battaglia" è determinato dai valori delle carte che seguono queste regole: Joker / Ace sconfigge King; Il re sconfigge la regina; La regina sconfigge Jack; Jack sconfigge 10; 10 sconfitte 9; .... Inoltre, sia 2 che 3 sconfiggono Ace / Joker. L'ultima regola può portare a un ciclo in cui 2 o 3 battiti Asso o Joker, Asso o Joker batte un'altra carta, che a sua volta batte il 2 o 3. In questo caso, il 2 o 3 vince la battaglia.
(Il seme è irrilevante in questo gioco di carte.)
Quando due o più giocatori hanno le stesse carte più alte, hanno una "guerra". Ciò significa che mettono una carta a testa in giù, e ognuna apre una nuova carta dal proprio mazzo, cercando di nuovo chi ha la carta più alta. Questo continua fino a quando un singolo giocatore vince l'intera battaglia.
(Tutte le carte di quella battaglia vanno nella pila degli scarti del giocatore che ha vinto la battaglia. Quindi tutti aprono una nuova carta. Quando il mazzo di un giocatore ha esaurito le carte, capovolgono la pila degli scarti e continuano con questo nuovo mazzo. Questo continua fino a quando un giocatore ha esaurito tutte le sue carte e poi vince il giocatore con il maggior numero di carte.)
Esempio di "battaglie" con tre giocatori:
- 4, 8, Jack:
Jack vince. - 7, Ace, Queen:
Ace vince. - 10, 10, re:
vince il re. - 3, Joker,
vince 2: 3. - Asso, Joker,
vince 2: 2. - 3, regina, asso:
3 vittorie. - Queen, Queen, 9:
Queen & Queen stanno avendo una "guerra", quindi continua con due nuove carte: 4, 8;
8 vittorie. - 4, 4, 4:
tutti hanno una "guerra", quindi continua con tre nuove carte: 8, Asso, 2;
2 vittorie. - Jack, 5, Jack:
Jack e Jack hanno una "guerra", quindi continua con due nuove carte: 5, 5;
Anche 5 e 5 sono uguali, quindi la 'guerra' continua ancora con due nuove carte: 10, Re;
Il re vince. - Joker, Joker, Ace:
tutti hanno una "guerra", quindi continua con tre nuove carte: 9, 7, 9;
Anche 9 e 9 sono uguali, quindi la "guerra" continua con due nuove carte: Jack, 3;
Jack vince.
Quindi, sulla sfida del codice:
Ingresso:
STDIN con un array o una stringa che simula un array (la tua chiamata, anche se la tua lingua supporta gli array). Questa matrice contiene le carte di una battaglia in ordine cronologico (vedere i casi di prova per una comprensione più chiara di ciò).
Produzione:
STDOUT l'indice del giocatore che ha vinto la battaglia.
È possibile scegliere se si desidera uno zero-indicizzato (cioè 0
, 1
o 2
) o uno-indicizzato uscita (cioè 1
, 2
, 3
).
Regole della sfida:
- L'input sarà un singolo array / stringa che rappresenta un array. Quindi non è possibile disporre di una serie di array per semplificarlo. Inoltre non puoi avere oggetti surrogati per le carte che non partecipano alla guerra.
- Usiamo le notazioni numeriche per le figure invece delle lettere. Quindi Ace / Joker =
1
; Jack =11
; Regina =12
; e re =13
. - In questa sfida possiamo presumere che stiamo sempre giocando con 3 giocatori .
- I primi tre indicano l'inizio della "battaglia". Quando due o più giocatori hanno una "guerra", le carte continue nell'array indicano la loro battaglia (vedi i casi di prova per una comprensione più chiara di ciò).
Regole generali:
- Questo è contrassegnato come code-golf , quindi vince la risposta più breve in byte.
Ciò non significa che le lingue non di golf non debbano entrare. Prova a trovare una risposta il più breve possibile al code-golf per "ogni" linguaggio di programmazione. - Indica quale indicizzazione (zero o uno indicizzato) hai utilizzato per l'output.
Casi test:
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)