O jogo Ghost é jogado entre dois jogadores que se alternam dizendo uma carta em cada turno. Em cada ponto, as letras até agora devem iniciar uma palavra em inglês válida. O perdedor é o jogador que deve completar uma palavra completa primeiro. Assim, por exemplo, se as letras até agora são EAGL, a única próxima letra válida a dizer é "E" e o próximo jogador perderá. (Mesmo que exista palavras mais longas como "aguia").
O desafio
Você deve escrever um programa ou função para determinar, dadas as letras até agora, quem vencerá assumindo dois jogadores perfeitos. A entrada é uma sequência que representa o estado atual do jogo e uma lista de sequências que representam o dicionário de palavras válidas. A saída deve distinguir se o próximo jogador a vencer ganhará ou perderá.
Detalhes
- O código deve lidar com o caso em que o estado atual está vazio. No entanto, você pode assumir que nenhuma palavra no dicionário está vazia.
- Você pode assumir que cada sequência de entrada consiste apenas em letras ASCII minúsculas, ou seja, az.
- Você pode assumir o estado atual e todas as palavras no dicionário têm no máximo 80 caracteres cada.
- É garantido que o dicionário não é vazio (para evitar o caso em que não há primeiro movimento válido).
- Você pode assumir que o "estado atual" será válido: haverá necessariamente alguma palavra começando com o estado atual; Além disso, o estado atual não será uma palavra completa, e nenhum prefixo do estado atual será uma palavra completa.
- O dicionário será pré-filtrado de acordo com as regras em que "palavras em inglês" são consideradas válidas para o jogo - por exemplo, para uma variante na qual palavras de três ou menos letras ainda não terminam o jogo, o dicionário será ser pré-filtrado para incluir apenas as palavras de quatro ou mais letras.
- Você pode assumir que o dicionário será pré-selecionado.
Exemplos
Suponha que o dicionário seja:
abbot
eager
eagle
eaglet
earful
earring
Em seguida, para os seguintes estados atuais, a saída deve ser a seguinte:
Current state Result
============= ======
loss
a win
eag win
eagl loss
ear win
earf win
earr loss
Da mesma forma, para a lista de palavras em https://raw.githubusercontent.com/dschepler/ghost-word-list/master/wordlist.txt (produzida em um sistema Debian usando pcregrep '^[a-z]{4,80}$' /usr/share/dict/american-english
), aqui está uma sessão possível:
Current state Result
============= ======
win
h loss
ho win
hoa loss
hoar win
hoars loss
(E então a próxima jogada termina "rouca".)
Pontuação
Este é o código-golf : O programa mais curto em bytes para cada linguagem de programação vence.