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!
Respuestas:
Perl 6: 741 caracteres, 758 bytes
La versión de golf está en la parte inferior, ya que es básicamente linenoise. Arriba está mi versión pre-golf. Ambos son interactivos (leerán tantos comandos del archivo de entrada como puedan y luego usarán STDIN para obtener comandos). Intentan usar los caracteres y colores originales.
El uso es como
perl6 beast.p6 beast-input
:La versión de golf:
¡Felices Pascuas!
fuente
Java, 1,843
Mi primer intento de resolver este rompecabezas con Java. Sé que hay muchas mejoras para acortarlo. Pero al final funciona por ahora.
Para probarlo, debes crear una clase
C
y pegar el código.args[0]
(estrictamente hablandoa[0]
) es para la entrada. El método de impresión del mapa no está incluido, ya que no es necesario para la salida del rompecabezas.Para ejecutarlo, intente por ejemplo:
Salida del último gran escenario un turno antes de que una bestia se coma al jugador:
Sin espacios de línea tontos: http://pastebin.com/raw.php?i=QhpxKcCT
Entonces el camino de los jugadores termina después de los movimientos
RRDDDRRRWW
, porque en el últimoW
golpe, la bestia a la izquierda irá a la derecha para comer al jugador.Otro ejemplo del gran mapa original pero con diferentes movimientos:
http://pastebin.com/raw.php?i=nBWjC3PZ
Ver esta animación: http://youtu.be/0DIhEhjWd6s
Y el último ejemplo con mapa original y diferentes movimientos (de acuerdo con las nuevas reglas de movimiento de bestias):
http://pastebin.com/raw.php?i=NNmgzx7U
Ver en youtube: http://youtu.be/jXPzL88TU2A
fuente
C -
1004984917Ahh, la belleza de C. Siguiendo el espíritu de la otra respuesta, traté de formatear la mía también :)
Me imagino que todavía hay algunas mejoras aquí y allá, pero fue muy divertido escribir y jugar golf. El recuento de caracteres incluye todos los espacios necesarios y las nuevas líneas.
Probé esto con todos los casos de muestra y algunos más míos, y parece estar funcionando correctamente. Si alguien encuentra alguna situación en la que no responde correctamente, avíseme.
La entrada es desde stdin y la salida hacia stdout. No hay comprobaciones de entrada incorrecta. Y, devuelve el puntaje si el jugador es comido, o si el jugador está vivo después de que se ejecutan todos los movimientos (incluso si todavía hay
H
alrededor).Versión sin golf:
fuente
RRRUWWWRRRURWWWWRDRRWWRDWWWWD
en el mapa grande, obtienes 6 mientras que él obtiene 8. Hizo un video , tal vez podrías imprimir cada paso y buscar cualquier anomalía ...