Numa tarde chuvosa, estás sentado à mesa da cozinha a jogar às cartas com a tua avó. O jogo é a versão dela do Camicia.
Ao princípio, parece apenas mais um jogo amigável: cartas batidas na mesa, risos de um lado ao outro da mesa, e um ou outro sorriso vitorioso da Nonna. Mas, à medida que o jogo se arrasta, acontece algo estranho. As mesmas cartas não param de voltar. Jogas carta atrás de carta, mas o fim nunca parece chegar.
Começas a pensar. Será que este jogo acaba? Ou podíamos continuar a jogar para sempre?
Mais tarde, a curiosidade leva-te a procurar na internet e, para tua surpresa, descobres que o que aconteceu não foi só má sorte. Tu e a tua avó podem ter tropeçado numa das sequências mais longas possíveis! De repente, não consegues largar o assunto. O que começou como um jogo descontraído transformou-se numa busca: quanto tempo pode durar realmente um jogo destes? Consegues encontrar uma sequência ainda mais longa do que a que jogaram à mesa da cozinha? Talvez até longa o suficiente para bater um novo recorde mundial?
E assim, com nada mais do que um baralho de cartas e alguma engenhosidade algorítmica, decides investigar...
Neste exercício, vais simular um jogo muito semelhante ao clássico jogo de cartas Camicia. O teu programa vai receber a configuração inicial dos baralhos de dois jogadores e tem de simular o jogo até este terminar (ou detetar que nunca vai terminar).
Um pequeno exemplo de uma partida que termina.
| Ronda | Jogador A | Jogador B | Pilha | Penalização devida |
|---|---|---|---|---|
| 1 | 2 A 7 8 Q 10 | 3 4 5 6 K 9 J | - | |
| 1 | A 7 8 Q 10 | 3 4 5 6 K 9 J | 2 | - |
| 1 | A 7 8 Q 10 | 4 5 6 K 9 J | 2 3 | - |
| 1 | 7 8 Q 10 | 4 5 6 K 9 J | 2 3 A | Jogador B: 4 |
| 1 | 7 8 Q 10 | 5 6 K 9 J | 2 3 A 4 | Jogador B: 3 |
| 1 | 7 8 Q 10 | 6 K 9 J | 2 3 A 4 5 | Jogador B: 2 |
| 1 | 7 8 Q 10 | K 9 J | 2 3 A 4 5 6 | Jogador B: 1 |
| 1 | 7 8 Q 10 | 9 J | 2 3 A 4 5 6 K | Jogador A: 3 |
| 1 | 8 Q 10 | 9 J | 2 3 A 4 5 6 K 7 | Jogador A: 2 |
| 1 | Q 10 | 9 J | 2 3 A 4 5 6 K 7 8 | Jogador A: 1 |
| 1 | 10 | 9 J | 2 3 A 4 5 6 K 7 8 Q | Jogador B: 2 |
| 1 | 10 | J | 2 3 A 4 5 6 K 7 8 Q 9 | Jogador B: 1 |
| 1 | 10 | - | 2 3 A 4 5 6 K 7 8 Q 9 J | Jogador A: 1 |
| 1 | - | - | 2 3 A 4 5 6 K 7 8 Q 9 J 10 | - |
| 2 | - | 2 3 A 4 5 6 K 7 8 Q 9 J 10 | - | - |
status: "finished", cards: 13, tricks: 1
Este é um pequeno exemplo de uma partida que entra em ciclo.
| Ronda | Jogador A | Jogador B | Pilha | Penalização devida |
|---|---|---|---|---|
| 1 | J 2 3 | 4 J 5 | - | - |
| 1 | 2 3 | 4 J 5 | J | Jogador B: 1 |
| 1 | 2 3 | J 5 | J 4 | - |
| 2 | 2 3 J 4 | J 5 | - | - |
| 2 | 3 J 4 | J 5 | 2 | - |
| 2 | 3 J 4 | 5 | 2 J | Jogador A: 1 |
| 2 | J 4 | 5 | 2 J 3 | - |
| 3 | J 4 | 5 2 J 3 | - | - |
| 3 | J 4 | 2 J 3 | 5 | - |
| 3 | 4 | 2 J 3 | 5 J | Jogador B: 1 |
| 3 | 4 | J 3 | 5 J 2 | - |
| 4 | 4 5 J 2 | J 3 | - | - |
O início da ronda 4 é igual ao início da ronda 2. Lembra-te: o valor das cartas numéricas não importa.
status: "loop", cards: 8, tricks: 3
"finished" ou "loop"
Para quem quiser aceitar um desafio mais emocionante, a procura de outros recordes para o jogo mais longo com fim continua em aberto. Há 653 534 134 886 878 245 000 (aproximadamente 654 triliões) possibilidades, e ainda não as calculámos todas!
Inscreve-te no Exercism para aprenderes e dominares Elixir com 58 conceitos168 exercícios, e mentoria humana real, tudo grátis.