В мире искусства ASCII есть вода, хэш-стены и буквенные механизмы.
Вы находитесь в комнате, состоящей из хеш-стен ( #
знаков):
#######
# #
# #
# #
# ### #
# #
#######
Вы устанавливаете источник воды S ( S
знак) и бак для воды E ( E
знак), который может получать воду из любого направления, но у вас есть только один источник S и один бак E.
#######
# S #
# #
# #
# ### #
# E #
#######
Таким образом, вы должны мудро выбрать, где разместить источник. Вот где вы получаете свои навыки игры в гольф .
Задание
Вы получаете вход, состоящий из строки, представляющей комнату с источником и резервуаром:
#######
# S #
# #
# #
# ### #
# E #
#######
Вы должны выяснить, достигает ли вода в конечном итоге резервуар. Вода стекает вниз, если возможно, влево и вправо, если это возможно. Вода не накапливается, потому что она не идет вверх.
Итак, для вышеприведенного ввода, результат:
#######
# * #
# * #
#*****#
#*###*#
#**O**#
#######
Вода благополучно достигает резервуара, поэтому вы должны вывести истинное значение.
Но если вода не достигает резервуара:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
#* #
#* #
#* X #
#*### #
#*****#
#######
Тогда вы должны вывести ложное значение.
Напишите программу, чтобы решить, достигнет ли вода воды в баке. Ваш код должен быть максимально коротким.
Предположения
Предположим, что входные данные всегда действительны (вся комната представляет собой закрытую прямоугольную область с S и E).
Предположим, что в качестве входных данных используется только одна комната.
Тестовые случаи
Ваша программа должна вернуть истинное значение для следующих тестовых случаев:
#######
# S #
# #
# #
# ### #
# E #
#######
#######
# S #
# #
# E #
# #
# #
#######
#######
# #
# #
# SE #
# ### #
# #
#######
###############################################
# S #
# #
# #
# #
# ############### #
# #
# ################## ################## #
# #
# #
# ##### #
# E #
###############################################
#######
# S #
# #
# #
# ### #
# # #
### ###
## E ##
# #
#######
Но ложное значение для следующих тестовых случаев:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
# #
# SE #
# #
# #
# #
#######
#######
# #
# E #
# #
# S #
# #
#######
####################################
# #
# #
# #
#S # E#
####################################
Комната со второй по последнюю в категории «Истина» и последняя комната в категории «Ложь» были бесстыдно украдены, позаимствованные у Кота: Прыгай и беги , Ману (который удалил пост песочницы).
Последняя комната в категории «Истина» взята из ответа Мартина Буттнера в «Retina» .
from
/to
/ реально (что облегчает участникам обработку всего теста дела сразу).Ответы:
Улитки , 20 байт
Печать
0
для значения falsey и1
для значения truthy.Попробуйте онлайн!
\S
матчиS
в началеd
устанавливает направление вниз{...},
соответствует материал в скобках 0 или более раз=\#
является утверждением, которое успешно выполняется, если#
перед улиткой есть символ, но не перемещает егоn
поворачивается на 90 градусов в любом направлении(...)?
соответствует шаблону в скобках 0 или 1 раз\
соответствует пробелу и перемещает улитку на него!(...
это негативное утверждениеt
телепортируется на любой непревзойденный квадрат в сетке\E
МатчиE
источник
Slip , 20 + 2 = 22 байта
Так что Слип все так же сломлен, как и раньше, но на этот раз это был вызов, который он действительно мог сделать. Хотя он никогда не создавался таким образом, чтобы играть в гольф, поэтому он никогда не победит Улитки: P
Требуется
r
флаг (без повторяющихся ячеек) для завершения.Попробуйте онлайн . Выход - путь, выбранный для правды, пустой для ложного.
источник
Сетчатка , 87 байт
Количество байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!
Столько, сколько возможна обработка 2D строк в Retina (или в регулярных выражениях .NET), это не совсем кратко ...
объяснение
Это заливка, которая отмечает все клетки, которые достигаются водой
S
. Это делается путем сопоставления символов, которые могут быть достигнуты, а затем транслитерации ихS
сT
-mode. Эта заливка проходит через оба пространства иE
. В+
начале это повторяется до тех пор, пока выход не перестанет изменяться.Что касается фактического регулярного выражения, содержит два отдельных случая:
Это соответствует пробелу или
E
который точно на одну клетку нижеS
. Вертикальное соответствие выполняется путем подсчета префикса в текущей строке с использованием групп балансировки, чтобы мы могли убедиться, что горизонтальное положение одинаково. Этот заботится о падении воды.Это очень похоже: он соответствует
S
и, если доступно, символу до и после него, при условии, что символ непосредственно под символомS
a#
. Это заботится о распространении воды по земле.Когда мы закончим, очень легко определить, достигла ли вода
E
. Если это так, тоE
он был удален из строки в заливке, а если нет, тоE
все еще там. Итак, давайте посчитаем количествоE
с:Но теперь это
0
(что я бы назвал фальшивкой) для тестов на правдивость и1
(что я бы назвал правдивыми) для тестов на ложь. Мы можем очень легко инвертировать это, посчитав число0
s в этом результате:Выполнено.
источник