Trova il risultato di un gioco di guerra
Quando ero alle elementari, c'era un gioco "rock-paper-scissors" che giocavamo durante le assemblee, in attesa del nostro insegnante, durante la ricreazione, ecc. L'abbiamo chiamato "guerra". Tuttavia, dopo alcune ricerche, si scopre che questa è una variante molto più semplice del "Gioco del fucile" (secondo WikiHow) . Lo chiamerò "Guerra" poiché le regole sono leggermente diverse:
2 persone siedono l'una di fronte all'altra. L'obiettivo del gioco è "uccidere" l'altro giocatore. Ad ogni turno, puoi giocare una delle 3 mosse:
Ricarica : hai una pistola che regge un singolo colpo. Deve essere ricaricato prima di poter essere sparato ogni volta. Ricaricare quando hai già munizioni è legale, ma non fa nulla. Una ricarica è stata simboleggiata toccando le tempie con entrambe le mani. Ogni giocatore inizia con 0 munizioni.
Guardia : l'unica mossa sicura. Se ti sparano mentre fai la guardia, non muori. La guardia veniva simbolizzata incrociando le braccia sul petto.
Fuoco : spara la tua pistola. Per sparare con successo, devi aver ricaricato dall'ultimo colpo. Se il tuo avversario sta ricaricando, vinci. Se sparano anche loro ed entrambi avete delle munizioni, è un pareggio. Se stanno facendo la guardia, hai sprecato le munizioni. Mentre sparare senza munizioni è una mossa legale, non fa nulla e ti rende vulnerabile come ricaricare. Il fuoco è stato simbolizzato indicando l'altro giocatore.
È stato giocato in modo simile a RPS, in quanto ogni giocatore contemporaneamente abbassa la propria scelta (abbiamo toccato due volte le gambe tra i turni per tenere il ritmo l'uno con l'altro, ma questo non è importante per la sfida).
La sfida:
Il tuo compito è trovare il risultato di un gioco di guerra. Può essere una funzione o un programma completo.
Ingresso
L'opzione che ogni giocatore ha scelto per ogni turno sarà rappresentata da un personaggio / stringa:
r : ricaricare
g : guardia
f : fuoco
L'input sarà un elenco di coppie, una stringa delimitata / non delimitata o qualsiasi altra cosa lungo queste linee.
Un input di esempio in Python potrebbe essere [("r", "g"), ("f", "r")]
, ovvero nel primo turno il primo giocatore ricaricato e il secondo giocatore sorvegliato. Al secondo turno, il primo giocatore spara, mentre il secondo giocatore ricarica. Il giocatore uno vince questo gioco. Lo stesso ingresso potrebbe eventualmente essere rappresentato come "r g f r"
, "rgfr"
, "rg fr"
"rg-fr"
...
Puoi assumere quanto segue:
L'input corrisponderà al formato scelto e conterrà solo caratteri validi.
Qualcuno morirà entro 100 turni.
Non puoi tuttavia supporre che i giri finiscano quando qualcuno muore.
Produzione
Un valore che indica chi ha vinto (o chi ha vinto per primo *
). Puoi scegliere cosa produrre per ogni scenario, ma devi tenere conto di quanto segue:
Il giocatore 1 vince
Il giocatore 2 vince
Si uccidono a vicenda (pareggio)
Ogni risultato deve avere un valore distrettuale e deve essere sempre lo stesso per ogni scenario.
Ad esempio: potresti ottenere 1
quando vince il giocatore 1, 2
quando vince il giocatore 2 e 0
in caso di pareggio. Quindi devi sempre produrre 1
quando vince il giocatore 1, 2
quando vince il giocatore 2 e 0
in caso di pareggio.
Può essere restituito o stampato sullo stdout. Lo spazio bianco finale va bene.
Proprio così è chiaro, l'unico scenario che porta a un pareggio è se entrambi i giocatori sparano ed entrambi hanno munizioni.
*
Dato che in questa sfida, i turni possono continuare dopo la morte di qualcuno, è possibile che alla fine vinca più di 1 giocatore. Devi trovare chi ha vinto per primo in base all'input.
Casi di prova (supponendo 1
quando vince P1, 2
quando vince P2 e 0
per un pareggio):
"rg fr" => 1 (P1 shot P2 while they were reloading)
"rg ff" => 1 (They both shot, but only P1 had ammo)
"rr ff" => 0 (Both had ammo and shot each other)
"rr ff rr fg" => 0 (Both had ammo and shot each other. Everything after the first win is ignored)
"rr fg rf" => 2 (P2 shot P1 while they were reloading)
"rf gg rr fg rr fr" => 1
(P2 tried to shoot but didn't have any ammo, then they both guarded, then they both reloaded, then P2 blocked a shot, then they both reloaded again [but P2 still only has 1 ammo!], then P1 shoots P2 while they're reloading.
"rr gf fr rf gg rg ff" => 1
^ Player 1 wins here. The rest to the right has no effect on the output
Questo è il codice golf, quindi vince il minor numero di byte!
Nota, come mostrano i casi di test, è necessario gestire mosse "stupide". È perfettamente valido per un giocatore provare a sparare quando non ha munizioni o ricaricare 2 turni di fila (e accumulare solo una singola munizione).
{"rff","rgf"}
?