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.
fuente
Respuestas:
JavaScript, 54 bytes
llámalo así: f (wordlist_as_array) (current_word_as_string), devuelve verdadero para ganar, falso para perder.
bastante mal rendimiento T_T, solo funciona con el pequeño caso de prueba.
Mostrar fragmento de código
fuente
Python 3 ,
13512984 bytes-4 bytes gracias al Sr. Xcoder !
-42 bytes gracias a Daniel Schepler !
Pruébalo en línea!
A
1
indica que el jugador actual ganará, mientras que a-1
indica que perderá.fuente
lambda
.PHP,
192 154 10098 bytesla función vuelve
1
para ganar,NULL
para perder.Llame
t(string $word,array $dictionary)
o pruébelo en línea .Descompostura
fuente
C ++, 243 bytes (no competitivo)
Para su información, aquí está la versión de golf de mi implementación de referencia (marcada como no competitiva ya que es mi propio desafío). Espera que la lista de palabras en el
w
parámetro sea una matriz terminada en nulo (de cadenas terminadas en nulo). Regresa1
si el próximo jugador pierde o0
si gana el siguiente jugador.Pruébalo en línea.
Versión ampliada y comentada:
fuente