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.
fonte
Respostas:
JavaScript, 54 bytes
chame assim: f (wordlist_as_array) (current_word_as_string), retorna true para vitória, false para perda.
desempenho muito ruim T_T, só funciona com o pequeno caso de teste.
Mostrar snippet de código
fonte
Python 3 ,
13512984 bytes-4 bytes graças ao Sr. Xcoder !
-42 bytes graças a Daniel Schepler !
Experimente online!
A
1
indica que o jogador atual vencerá, enquanto a-1
indica que eles perderão.fonte
lambda
.PHP,
192 154 10098 bytesfunção retorna
1
para a vitória,NULL
para a perda.Ligue
t(string $word,array $dictionary)
ou experimente online .demolir
fonte
C ++, 243 bytes (não competitivo)
Para sua informação, aqui está a versão básica da minha implementação de referência (marcada como não competitiva, pois é meu próprio desafio). Ele espera que a lista de palavras no
w
parâmetro seja uma matriz terminada em nulo (de cadeias terminadas em nulo). Ele retorna1
se o próximo jogador perder ou0
se o próximo jogador vencer.Experimente online.
Versão expandida e comentada:
fonte