Como aprendimos de IBM PC AT, YouTube (ver video) , Wikipedia (ver artículo) y Sesame Street:
¡La letra H
es la letra más despiadada del alfabeto !
(Incluso cuando en realidad está compuesto de dos elementos en la página de código 437. De hecho, es incluso MÁS despiadado de esa manera).
Al igual que los Aliens en, uhm ... er ... Aliens , Bestias persiguen implacablemente a todos los que se atrevan a acercarse a sus huevos. No hay razonamiento con ellos. Debes aplastarlos para no perecer.
Para este escenario, asumiremos que estás en tu última vida y que has conocido a Bestias simples en un terreno sin huevos (como en la captura de pantalla de Wikipedia). No tiene un teclado numérico y solo puede moverse directamente hacia arriba / abajo / izquierda / derecha ... pero las bestias aparentemente tienen uno, y pueden moverse en diagonal en su turno.
La opción de movimiento de una Bestia entre sus opciones será la que minimice la distancia del jugador. Si las distancias son iguales, el desempate se realiza favoreciendo la izquierda + arriba sobre la derecha + abajo, pero aquí está la matriz de desambiguación para ser explícito al respecto ... el número más bajo para el desempate:
1 3 4
2 H 5
6 8 7
Una bestia nunca duerme, pero afortunadamente son un poco más lentas que el jugador. Se mueven cada dos turnos (dando al jugador una ventaja al comenzar sus alternancias en el segundo turno). Deben moverse si es posible, independientemente de si eso los aleja más del jugador.
Aplastas a una bestia si mueves un tren de paredes móviles donde estaba sentado en un espacio cerrado. Estas bestias simples valen 2 puntos por cabeza.
Entrada
Un par de enteros que indican el tamaño de un mapa en columnas y luego en filas.
Recuento de filas de líneas de entrada, cada una del tamaño de columna ... que contiene un muro sólido (
#
), un muro móvil (~
), una bestia (H
), el jugador (O
) o simplemente un espacio.Entrada que será U, D, L, R que indica un intento de movimiento por parte del jugador ... o W para esperar. Tenga en cuenta que intentar empujar una pared móvil que está bloqueada es una entrada legal, simplemente no dará lugar a ninguna acción.
Salida
aHHHH!
si las bestias mataron al jugador ... o nada si el jugador ganó sin que queden bestiasEl marcador
(Nota: para fines de depuración y / o diversión, probablemente querrá poder generar el estado en cada paso; pero eso es demasiado largo para publicar aquí).
Aclaraciones
Se garantiza que los mapas estarán delimitados por paredes sólidas.
El orden de quién se mueve por turno es importante para el resultado. Por lo tanto: el jugador siempre va primero, luego las bestias reciben una orden basada en su posición inicial del mapa si estabas barriendo la pantalla de arriba a abajo de izquierda a derecha. (Una bestia de la fila 1 se mueve antes que una bestia de la fila 2, y dos bestias en la misma fila sería la que tenga el número de columna más bajo que se movería antes que la otra)
Las bestias en movimiento diagonales pueden moverse en cualquier espacio diagonal adyacente abierto, independientemente de si requiere apretarse entre las paredes.
Un jugador puede empujar cualquier número de paredes móviles en una línea siempre que haya un espacio o una bestia en el otro extremo. Pero tratar de empujar un tren de paredes hacia una Bestia que no está atrapada entre las paredes trata a la Bestia como una pared, y no permite el movimiento.
La decisión de movimiento de una Bestia durante un turno se basa en la ubicación del jugador al comienzo del turno. La optimización deseada de la "distancia al jugador" es a través de un cálculo "en línea recta". Cualquier aproximación que dé el mismo resultado medido desde el centro de su cuadrado hasta el centro del cuadrado del jugador está bien.
Si una Bestia no puede hacer lo que hubiera sido su primer movimiento preferido en un turno porque una Bestia de mayor prioridad tomó su lugar, tomará su próxima mejor opción en lugar de permanecer en su lugar (si un movimiento aún es posible).
Casos de muestra
Simple Crush
Entrada
5 3
#####
#O~H#
#####
R
Salida
2
Matriz de preferencias -> Muerte
Entrada
5 5
#####
#O #
# ~ #
# H#
#####
WWDW
Salida
aHHHH!
0
Matriz de preferencias -> Ganar
Entrada
5 5
#####
#O #
# ~ #
# H#
#####
WRD
Salida
2
Esperando al segador
Entrada
5 5
#####
#O #
# ~ #
# H#
#####
WWW
Salida
aHHHH!
0
Derrota exitosa en el escenario de Wikipedia
Entrada
40 23
########################################
#~ ~ ~~ ~ ~ ~~ ~ ~~ ~ ~ ~~ #
#~~ ~ ~~ ~ ~ ~~ ~ #
#~# ~~ ~~~~ ~ ~~~~ ~ ~~~ ~#
# ~ ~ ~ ~~ #~~ ~ #
#~~ ~~~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ #
# ~~ ~ ~ ~ ~~~ H ~ #~ #
# O~ ~ # ~~~ ~ ~ ~~ ~ ~ ~~ #
# ~ ~H~~ ~~ ~ # ~~ ~ #
# ~~ ~ ~~~ ~~ ~~~~ ~ ~#
#~ ~ ~~~ ~ ~ ~ ~ ~~ ~~#
# ~ # ~ ~~ ~~~ ~ ~ ~ # ~#
#~ ~ ~~ ~ ~ H ~~ ~~ ~ ~ ~~~ #
# ~ ~ ~ ~ ~ ~~~ ~ #
# ~~ ~ ~ ~~ ~ ~ ~ ~ ~ #
# ~~ ~ ~ ~ ~ ~~ #
#~ ~ # ~~~~ ~ ~~~H # ~ #
# ~ ~ ~ ~ ~ ~~ ~ #
# ~ ~ #~ ~ ~~ ~ ~ ~#
# ~~ ~ ~ ~~ ~ ~ #
# ~~~ ~ ~~ ~ ~ ~ ~ #
# ~ ~ ~ ~~ ~ ~ ~ #
########################################
RRRUWWWRRRURWWWWRDRRWWRDWWWWD
Salida
8
Mapa proporcionado por mí, movimientos y resultados de @bobbel, corroborado por mí y @Allbeert.
Criterios ganadores
Creo que esto es golfable, así que seguiré las reglas del código de golf a menos que la gente se queje.
Crédito adicional
¡Implementación Unicode jugable con los caracteres de doble ancho para parecerse a la imagen!