No mundo da arte ASCII, há água, paredes de hash e mecanismos de letras.
Você está em uma sala composta de paredes de hash ( #
placas):
#######
# #
# #
# #
# ### #
# #
#######
Você instala uma fonte de água S ( S
sinal) e um tanque de água E ( E
sinal) que pode receber água de qualquer direção, mas você só tem uma fonte S e um tanque E.
#######
# S #
# #
# #
# ### #
# E #
#######
Então você tem que selecionar sabiamente onde colocar a fonte. É aí que você desenvolve suas habilidades de código-golfe .
A tarefa
Você recebe uma entrada que consiste em uma sequência que representa uma sala com a fonte e o tanque:
#######
# S #
# #
# #
# ### #
# E #
#######
Você tem que descobrir se a água finalmente chega ao tanque. A água flui para baixo, se possível, para a esquerda e para a direita, se possível. A água não se acumula porque não sobe.
Portanto, para a entrada acima, o resultado é:
#######
# * #
# * #
#*****#
#*###*#
#**O**#
#######
Como a água chega feliz ao tanque, você deve gerar um valor verdadeiro.
Mas se a água não chegar ao tanque:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
#* #
#* #
#* X #
#*### #
#*****#
#######
Então você deve gerar um valor falso.
Escreva um programa para decidir se a água finalmente chega ao tanque. Seu código deve ser o mais curto possível.
Suposições
Suponha que a entrada seja sempre válida (a sala inteira é uma região retangular fechada com S e E).
Suponha que haja apenas uma sala fornecida como entrada.
Casos de teste
Seu programa deve retornar um valor verdadeiro para os seguintes casos de teste:
#######
# S #
# #
# #
# ### #
# E #
#######
#######
# S #
# #
# E #
# #
# #
#######
#######
# #
# #
# SE #
# ### #
# #
#######
###############################################
# S #
# #
# #
# #
# ############### #
# #
# ################## ################## #
# #
# #
# ##### #
# E #
###############################################
#######
# S #
# #
# #
# ### #
# # #
### ###
## E ##
# #
#######
Mas um valor falso para os seguintes casos de teste:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
# #
# SE #
# #
# #
# #
#######
#######
# #
# E #
# #
# S #
# #
#######
####################################
# #
# #
# #
#S # E#
####################################
O penúltimo quarto na categoria Verdadeiro e o último na categoria Falso foram roubados descaradamente emprestados de Koth: Jump and Run por Manu (que excluiu a postagem da caixa de areia).
O último quarto da categoria True é da resposta de Martin Buttner em Retina .
from
/to
/ realmente (o que facilita para os participantes processar todos os testes casos de uma só vez).Respostas:
Caracóis , 20 bytes
Imprime
0
para o valor de falsey e1
para o valor de verdade .Experimente online!
\S
partidasS
no iníciod
define a direção para baixo{...},
corresponde ao material entre chaves 0 ou mais vezes=\#
é uma afirmação que obtém êxito se houver um#
caractere antes do caracol, mas não o moven
gira 90 graus em qualquer direção(...)?
corresponde ao padrão entre parênteses 0 ou 1 vezes\
combina com um espaço e move o caracol para ele!(...
é uma afirmação negativat
teleporta para qualquer quadrado incomparável na grade\E
fósforosE
fonte
Deslizamento , 20 + 2 = 22 bytes
Então Slip ainda está quebrado como sempre, mas pela primeira vez esse foi um desafio que ele poderia realmente fazer. No entanto, nunca foi realmente projetado para ser tão golfe, portanto nunca derrotará o Snails em nada: P
Precisa do
r
sinalizador (sem células repetidas) para terminar.Experimente online . Saída é o caminho percorrido para a verdade, vazio para a falsificação.
fonte
Retina , 87 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
Por mais que o processamento de string 2D seja possível no Retina (ou regex .NET em geral), não é exatamente conciso ...
Explicação
Este é um preenchimento de inundação que marca todas as células atingidas pela água
S
. Fá-lo, combinando os caracteres que podem ser alcançados e, em seguida, transliterando-los paraS
comT
-mode. Esse preenchimento passa por ambos os espaços eE
. o+
no início repete isso até que a saída pare de mudar.Quanto ao regex real, contém dois casos separados:
Isso corresponde a um espaço ou
E
que é exatamente uma célula abaixo de umS
. A correspondência vertical é feita contando o prefixo na linha atual usando grupos de balanceamento para garantir que a posição horizontal seja a mesma. Este cuida da queda de água.Isso é muito semelhante: corresponde a um
S
caractere, se disponível, antes e depois dele, desde que o caractere diretamente abaixo deleS
seja a#
. Isso cuida da água se espalhando pelo chão.Quando terminamos, é muito fácil determinar se a água chegou
E
. Se foi,E
foi removido da sequência no preenchimento de inundação e, se não,E
ainda está lá. Então, vamos contar o número deE
s:Mas agora isso é
0
(o que eu consideraria falso) para casos de teste de verdade e1
(o que eu consideraria verdade) para casos de teste de falsidade. Podemos inverter isso muito facilmente contando o número de0
s neste resultado:Feito.
fonte