En una ronda del ejercicio de dilema del prisionero , dos jugadores deciden si cooperar o desertar para esa ronda. La puntuación para una ronda es:
- El jugador A y el jugador B cooperan: 1 punto por ambos
- El jugador A y el jugador B tienen ambos defectos: 2 puntos por ambos
- El jugador A coopera y el jugador B presenta defectos: 3 puntos por cooperar con el jugador A y 0 puntos por desertar del jugador B
Sin embargo, no debe preocuparse por la estrategia: su programa simplemente tabulará el puntaje de un juego. (En caso de que ya esté familiarizado con el dilema del prisionero, mis "puntos" aquí corresponden a "años en prisión").
Su desafío es tomar aportes que representen las elecciones de los jugadores en varias rondas y calcular sus puntajes totales respectivos. Un jugador envía las opciones en minúsculas c
y d
(para cooperar y desertar ), y el otro envía las opciones en mayúsculas C
y D
. Estas opciones se proporcionan a su programa como una cadena.
Normalmente, los jugadores en el dilema del prisionero presentan sus movimientos de forma simultánea e iterativa. En este desafío, sin embargo, los jugadores pueden haber presentado sus elecciones para varias rondas a la vez. Si el movimiento de un jugador está fuera de secuencia, el programa de puntuación lo recuerda y lo compara con el siguiente movimiento disponible del jugador contrario.
Aquí hay una cadena de entrada de muestra:
cDCddDDCcCc
Para mostrar las coincidencias que existen en esta entrada, llamaré las minúsculas y mayúsculas por separado, y las emparejaré:
cDCddDDCcCc
c dd c c => cddcc
DC DDC C => DCDDCC
Estos se combinarán en las rondas:
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)
Lo que produce la puntuación 9
(minúscula) a 6
(mayúscula), por lo que la salida debe ser 9,6
(o cualquier delimitador inequívoco).
Para expresarlo de otra manera, aquí está cada emparejamiento extraído en su propia fila:
cDCddDDCcCc
cD
Cd
dD
D c
C c
Hay uno sin igual C
, porque el jugador en mayúscula envió más movimientos que el jugador en minúscula. Eso es aceptable, y se ignora por completo para fines de puntuación.
Aquí están los requisitos:
Debe escribir un programa o función que acepte una cadena de la forma de expresión regular
/[cdCD]+/
, a través de algún mecanismo de entrada (STDIN, argumento de función, lectura del archivo, etc.). (Su programa puede opcionalmente aceptar entradas con una nueva línea final).Su programa o función debe generar o devolver los puntajes de los jugadores como una cadena. El formato de salida debe comenzar con el puntaje del jugador en minúscula, seguido del puntaje del jugador en mayúscula, separado por cualquier delimitador no vacío y no numérico de su elección. (Una nueva línea final es opcional).
Si un jugador tiene más movimientos que el otro, se ignoran los movimientos en exceso.
Si todos los movimientos en la entrada provienen exclusivamente de un jugador (es decir, no se han jugado rondas en absoluto), entonces la puntuación de cada jugador es
0
.La presentación más pequeña en bytes gana.
Casos de prueba
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 está [0,0]
bien para la salida?