En el mundo del arte ASCII, hay agua, paredes hash y mecanismos de letras.
Estás en una habitación compuesta por paredes de hachís ( #
signos):
#######
# #
# #
# #
# ### #
# #
#######
Instala una fuente de agua S ( S
letrero) y un tanque de agua E ( E
letrero) que puede recibir agua desde cualquier dirección, pero solo tiene una fuente S y un tanque E.
#######
# S #
# #
# #
# ### #
# E #
#######
Por lo tanto, debe seleccionar sabiamente dónde colocar la fuente. Ahí es donde sacas tus habilidades de código de golf .
La tarea
Obtiene una entrada que consiste en una cadena que representa una habitación con la fuente y el tanque:
#######
# S #
# #
# #
# ### #
# E #
#######
Tienes que averiguar si el agua finalmente llega al tanque. El agua fluye hacia abajo, si es posible, de lo contrario hacia la izquierda y hacia la derecha, si es posible. El agua no se acumula porque no sube.
Entonces, para la entrada anterior, el resultado es:
#######
# * #
# * #
#*****#
#*###*#
#**O**#
#######
El agua llega felizmente al tanque, por lo que debe generar un valor verdadero.
Pero si el agua no llega al tanque:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
#* #
#* #
#* X #
#*### #
#*****#
#######
Entonces debe generar un valor falso.
Escriba un programa para decidir si el agua finalmente llega al tanque. Su código debe ser lo más corto posible.
Supuestos
Suponga que la entrada siempre es válida (toda la sala es una región rectangular cerrada con S y E).
Suponga que solo se proporciona una habitación como entrada.
Casos de prueba
Su programa debe devolver un valor verdadero para los siguientes casos de prueba:
#######
# S #
# #
# #
# ### #
# E #
#######
#######
# S #
# #
# E #
# #
# #
#######
#######
# #
# #
# SE #
# ### #
# #
#######
###############################################
# S #
# #
# #
# #
# ############### #
# #
# ################## ################## #
# #
# #
# ##### #
# E #
###############################################
#######
# S #
# #
# #
# ### #
# # #
### ###
## E ##
# #
#######
Pero un valor falso para los siguientes casos de prueba:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
# #
# SE #
# #
# #
# #
#######
#######
# #
# E #
# #
# S #
# #
#######
####################################
# #
# #
# #
#S # E#
####################################
La penúltima habitación en la categoría Verdadero y la última habitación en la categoría Falso fueron robadas descaradamente de Koth: Jump and Run por Manu (quien eliminó la publicación de sandbox).
La última habitación en la categoría Verdadero es de la respuesta de Martin Buttner en Retina .
from
/to
/ realmente (lo que facilita a los participantes procesar todas las pruebas casos a la vez).Respuestas:
Caracoles , 20 bytes
Imprime
0
para el valor de falsey y1
para el valor de verdad.Pruébalo en línea!
\S
partidosS
al iniciod
establece la dirección hacia abajo{...},
coincide con las cosas entre llaves 0 o más veces=\#
es una afirmación que tiene éxito si hay un#
personaje delante del caracol, pero no lo mueven
gira 90 grados en cualquier dirección(...)?
coincide con el patrón entre paréntesis 0 o 1 veces\
coincide con un espacio y mueve el caracol sobre él!(...
es una afirmación negativat
se teletransporta a cualquier cuadrado sin igual en la cuadrícula\E
partidosE
fuente
Slip , 20 + 2 = 22 bytes
Así que Slip sigue tan roto como siempre, pero por una vez este fue un desafío que realmente podría hacer. Sin embargo, nunca fue realmente diseñado para ser tan golfista, por lo que nunca superará a Snails en nada: P
Necesita que la
r
bandera (sin celdas repetidas) termine.Pruébalo en línea . La salida es el camino tomado por la verdad, vacío por la falsedad.
fuente
Retina , 87 bytes
El recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea!
Por mucho que sea posible el procesamiento de cadenas 2D en Retina (o .NET regex en general), no es exactamente conciso ...
Explicación
Este es un relleno de inundación que marca todas las celdas a las que llega el agua
S
. Lo hace uniendo los caracteres que se pueden alcanzar y luego transliterándolosS
conT
-mode. Este relleno de inundación atraviesa ambos espacios yE
. Al+
principio se repite esto hasta que la salida deja de cambiar.En cuanto a la expresión regular real, contiene dos casos separados:
Esto coincide con un espacio o
E
que es exactamente una celda debajo de unS
. La coincidencia vertical se realiza contando el prefijo en la línea actual utilizando grupos de equilibrio para que podamos asegurarnos de que la posición horizontal sea la misma. Este se encarga de la caída del agua.Esto es muy similar: coincide con un carácter
S
y, si está disponible, antes y después, siempre que el carácter directamente debajo de esteS
sea un#
. Esto se encarga de que el agua se extienda por el suelo.Cuando terminamos, es muy fácil determinar si el agua llegó
E
. Si lo hizo, entoncesE
se ha eliminado de la cadena en el relleno de inundación, y si no,E
todavía está allí. Entonces, cuentemos el número deE
s:Pero ahora eso es
0
(lo que consideraría falso) para los casos de prueba de verdad y1
(lo que consideraría verdadero) para los casos de prueba de falsedad. Podemos invertir esto muy fácilmente contando el número de0
s en este resultado:Hecho.
fuente