Em uma rodada do dilema do prisioneiro , dois jogadores decidem cooperar ou desertar para essa rodada. A pontuação para uma rodada é:
- O jogador A e o jogador B cooperam: 1 ponto para ambos
- Jogador A e Jogador B ambos com defeito: 2 pontos para ambos
- O jogador A coopera e o jogador B falha: 3 pontos por cooperar no jogador A e 0 pontos por deserção do jogador B
Você não precisa se preocupar com estratégia: seu programa será apenas tabular a pontuação de um jogo. (Caso você já esteja familiarizado com o dilema do prisioneiro, meus "pontos" aqui correspondem a "anos de prisão".)
Seu desafio é receber informações que representem as escolhas dos jogadores em várias rodadas e calcular suas respectivas pontuações totais. Um jogador envia opções em minúsculas c
e d
(para cooperar e defeito ), e o outro envia opções em maiúsculas C
e D
. Essas opções são fornecidas ao seu programa como uma string.
Normalmente, jogadores no dilema do prisioneiro enviam seus movimentos simultaneamente e de forma iterativa. Nesse desafio, no entanto, os jogadores podem ter enviado suas escolhas para várias rodadas ao mesmo tempo. Se o movimento de um jogador estiver fora de sequência, o programa de pontuação o lembra e o combina com o próximo movimento disponível do jogador adversário.
Aqui está um exemplo de string de entrada:
cDCddDDCcCc
Para mostrar as correspondências existentes nesta entrada, chamarei as minúsculas e as maiúsculas separadamente e as emparelhe:
cDCddDDCcCc
c dd c c => cddcc
DC DDC C => DCDDCC
Estes serão emparelhados nas rodadas:
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)
O que produz a pontuação 9
(minúscula) para 6
(maiúscula), a saída deve ser 9,6
(ou qualquer delimitador inequívoco).
Para expressá-lo de outra maneira, eis cada emparelhamento extraído em sua própria linha:
cDCddDDCcCc
cD
Cd
dD
D c
C c
Há um incomparável C
, porque o jogador em maiúsculas enviou mais movimentos que o jogador em minúsculas. Isso é aceitável e é totalmente ignorado para fins de pontuação.
Aqui estão os requisitos:
Você deve escrever um programa ou função que aceite uma sequência do formulário de expressão regular
/[cdCD]+/
, por meio de algum mecanismo de entrada (STDIN, argumento de função, leitura de arquivo etc.). (Seu programa pode opcionalmente aceitar entrada com uma nova linha à direita.)Seu programa ou função deve gerar ou retornar as pontuações dos jogadores como uma string. O formato de saída deve começar com a pontuação do jogador em minúsculas, seguida pela pontuação do jogador em maiúsculas, separada por qualquer delimitador não vazio e não numérico de sua escolha. (Uma nova linha à direita é opcional.)
Se um jogador tiver mais jogadas que o outro, as jogadas em excesso serão ignoradas.
Se todos os movimentos na entrada são exclusivamente de um jogador (ou seja, nenhuma rodada foi jogada), então a pontuação de cada jogador é
0
.O menor envio em bytes vence.
Casos de teste
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)
ou [0,0]
OK para saída?