In un round dell'esercizio del dilemma del prigioniero , due giocatori decidono ciascuno se cooperare o difendersi per quel round. Il punteggio per un round è:
- Il giocatore A e il giocatore B cooperano entrambi: 1 punto per entrambi
- Il giocatore A e il giocatore B hanno entrambi un difetto: 2 punti per entrambi
- Il giocatore A collabora e i difetti del giocatore B: 3 punti per la cooperazione del giocatore A e 0 punti per la defezione del giocatore B
Non devi preoccuparti della strategia, però: il tuo programma semplicemente tabulerà il punteggio per una partita. (Nel caso in cui tu abbia già familiarità con il dilemma del prigioniero, i miei "punti" qui corrispondono a "anni di prigione").
La tua sfida è quella di prendere input che rappresentano le scelte dei giocatori in diversi round e calcolare i rispettivi punteggi totali. Un giocatore invia le scelte in minuscolo ce d(per cooperare e per difetto ) e l'altro invia le scelte in maiuscolo Ce D. Queste scelte sono fornite al tuo programma come una stringa.
Normalmente, i giocatori nel dilemma del prigioniero presentano le loro mosse simultaneamente e iterativamente. In questa sfida, tuttavia, i giocatori potrebbero aver presentato le proprie scelte per diversi round contemporaneamente. Se la mossa di un giocatore è fuori sequenza, il programma di punteggio lo ricorda e lo abbina alla successiva mossa disponibile del giocatore avversario.
Ecco una stringa di input di esempio:
cDCddDDCcCc
Per mostrare le corrispondenze esistenti in questo input, chiamerò separatamente le lettere minuscole e maiuscole e le accoppierò:
cDCddDDCcCc
c dd c c => cddcc
DC DDC C => DCDDCC
Questi saranno associati ai round:
c vs D (3 pts for lowercase-player, 0 pts for uppercase-player)
d vs C (0 pts for lowercase-player, 3 pts for uppercase-player)
d vs D (2 pts for both)
c vs D (3 pts for lowercase-player, 0 pts for uppercase-player)
c vs C (1 pt for both)
Che produce il punteggio 9(minuscolo) a 6(maiuscolo), quindi l'output dovrebbe essere 9,6(o qualsiasi delimitatore non ambiguo).
Per esprimerlo in un altro modo, ecco ogni accoppiamento estratto sulla propria riga:
cDCddDDCcCc
cD
Cd
dD
D c
C c
Ne esiste uno senza pari C, perché il giocatore in maiuscolo ha inviato più mosse del giocatore in minuscolo. Questo è accettabile ed è totalmente ignorato ai fini del punteggio.
Ecco i requisiti:
È necessario scrivere un programma o una funzione che accetta una stringa del modulo di espressione regolare
/[cdCD]+/, tramite alcuni meccanismi di input (STDIN, argomento della funzione, lettura da file, ecc.). (Il tuo programma può facoltativamente accettare input con una nuova riga finale).Il tuo programma o funzione deve generare o restituire i punteggi dei giocatori come una stringa. Il formato di output deve iniziare con il punteggio del giocatore in minuscolo, seguito dal punteggio del giocatore in maiuscolo, separato da qualsiasi delimitatore non vuoto, non numerico di tua scelta. (Una nuova riga finale è facoltativa.)
Se un giocatore ha più mosse dell'altro, le mosse in eccesso vengono ignorate.
Se tutte le mosse nell'input provengono esclusivamente da un giocatore (cioè non sono stati giocati affatto round), allora il punteggio di ciascun giocatore è
0.Vince il più piccolo invio in byte.
Casi test
Input: cDCddDDCcCc
Output: 9,6 -- or any delimiter; I chose commas here
Input: cccDDD
Output: 9,0
Input: DDDDDDccc
Output: 9,0
Input: cDcDcD
Output: 9,0
Input: dcDDC
Output: 5,2
Input: CcdCDDcd
Output: 6,6
Input: Ddd
Output: 2,2
Input: ccccccccccc
Output: 0,0
(0,0)o [0,0]OK per l'output?
