El juego de Ghost se juega entre dos jugadores que se alternan diciendo una letra en cada turno. En cada punto, las letras hasta ahora deben comenzar con alguna palabra válida en inglés. El perdedor es el jugador que primero completa una palabra completa. Entonces, por ejemplo, si las letras hasta ahora son EAGL, entonces la única siguiente letra válida para decir es "E" y entonces el siguiente jugador perderá. (Aunque hay palabras más largas como "aguilucho").
El reto
Debe escribir un programa o función para determinar, dadas las letras hasta ahora, quién ganará asumiendo dos jugadores perfectos. La entrada es una cadena que representa el estado actual del juego y una lista de cadenas que representa el diccionario de palabras válidas. La salida debe distinguir si el próximo jugador que vaya ganará o perderá.
Detalles
- El código debe manejar el caso donde el estado actual está vacío. Sin embargo, puede suponer que ninguna palabra en el diccionario está vacía.
- Puede suponer que cada cadena de entrada consta solo de letras minúsculas ASCII, es decir, az.
- Puede asumir el estado actual y todas las palabras del diccionario tienen como máximo 80 caracteres cada una.
- Se garantiza que el diccionario no está vacío (para evitar el caso de que no haya un primer movimiento válido).
- Puede suponer que el "estado actual" será válido: necesariamente habrá alguna palabra que comience con el estado actual; Además, el estado actual no será una palabra completa, ni ningún prefijo del estado actual será una palabra completa.
- El diccionario se prefiltrará de acuerdo con las reglas de las cuales las "palabras en inglés" se consideran válidas para el juego, por ejemplo, para una variante en la que las palabras de tres o menos letras aún no terminan el juego, el diccionario prefiltrarse para incluir solo las palabras de cuatro o más letras.
- Puede suponer que el diccionario se clasificará previamente.
Ejemplos
Supongamos que el diccionario es:
abbot
eager
eagle
eaglet
earful
earring
Luego, para los siguientes estados actuales, la salida debería ser la siguiente:
Current state Result
============= ======
loss
a win
eag win
eagl loss
ear win
earf win
earr loss
Del mismo modo, para la lista de palabras en https://raw.githubusercontent.com/dschepler/ghost-word-list/master/wordlist.txt (producido en un sistema Debian usando pcregrep '^[a-z]{4,80}$' /usr/share/dict/american-english
) aquí hay una posible sesión:
Current state Result
============= ======
win
h loss
ho win
hoa loss
hoar win
hoars loss
(Y luego el siguiente movimiento completa "ronco").
Puntuación
Esto es code-golf : gana el programa más corto en bytes para cada lenguaje de programación.