W świecie sztuki ASCII istnieje woda, ściany mieszające i mechanizmy literowe.
Jesteś w pokoju zbudowanym ze ścian mieszających ( #
znaków):
#######
# #
# #
# #
# ### #
# #
#######
Instalujesz źródło wody S ( S
znak) i zbiornik wody E ( E
znak), który może odbierać wodę z dowolnego kierunku, ale masz tylko jedno źródło S i jeden zbiornik E.
#######
# S #
# #
# #
# ### #
# E #
#######
Musisz więc mądrze wybrać, gdzie umieścić źródło. Właśnie tam wykorzystujesz swoje umiejętności gry w golfa .
Zadanie
Otrzymujesz dane wejściowe składające się z łańcucha reprezentującego pomieszczenie ze źródłem i zbiornikiem:
#######
# S #
# #
# #
# ### #
# E #
#######
Musisz dowiedzieć się, czy woda ostatecznie dotrze do zbiornika. Woda spływa w miarę możliwości w lewo i prawo, jeśli to możliwe. Woda nie gromadzi się, ponieważ nie podnosi się.
Tak więc dla powyższego wejścia wynik jest następujący:
#######
# * #
# * #
#*****#
#*###*#
#**O**#
#######
Woda szczęśliwie dociera do zbiornika, więc musisz podać prawdziwą wartość.
Ale jeśli woda nie dociera do zbiornika:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
#* #
#* #
#* X #
#*### #
#*****#
#######
Następnie musisz podać wartość fałszowania.
Napisz program, aby zdecydować, czy woda ostatecznie dotrze do zbiornika. Twój kod powinien być jak najkrótszy.
Założenia
Załóżmy, że dane wejściowe są zawsze prawidłowe (cały pokój jest zamkniętym prostokątnym obszarem z literami S i E).
Załóżmy, że jako wejście jest tylko jeden pokój.
Przypadki testowe
Twój program powinien zwrócić prawdziwą wartość dla następujących przypadków testowych:
#######
# S #
# #
# #
# ### #
# E #
#######
#######
# S #
# #
# E #
# #
# #
#######
#######
# #
# #
# SE #
# ### #
# #
#######
###############################################
# S #
# #
# #
# #
# ############### #
# #
# ################## ################## #
# #
# #
# ##### #
# E #
###############################################
#######
# S #
# #
# #
# ### #
# # #
### ###
## E ##
# #
#######
Ale wartość fałsz dla następujących przypadków testowych:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
# #
# SE #
# #
# #
# #
#######
#######
# #
# E #
# #
# S #
# #
#######
####################################
# #
# #
# #
#S # E#
####################################
Przedostatni pokój w kategorii True i ostatni pokój w kategorii False zostały bezwstydnie skradzione pożyczone od Koth: Jump and Run przez Manu (który usunął post z piaskownicy).
Ostatni pokój w kategorii True pochodzi od odpowiedzi Martina Buttnera w Retinie .
from
/to
/ naprawdę (co ułatwia uczestnikom przetwarzanie wszystkich testów sprawy na raz).Odpowiedzi:
Ślimaki , 20 bajtów
Drukuje
0
dla wartości falsey i1
dla prawdziwej wartości.Wypróbuj online!
\S
meczeS
na początkud
ustawia kierunek w dół{...},
dopasowuje rzeczy w nawiasach klamrowych 0 lub więcej razy=\#
to twierdzenie, które się powiedzie, jeśli#
przed ślimakiem jest znak, ale go nie poruszan
obraca się o 90 stopni w dowolnym kierunku(...)?
dopasowuje wzór w nawiasach 0 lub 1 razy\
dopasowuje spację i przesuwa na nią ślimaka!(...
jest twierdzeniem negatywnymt
teleportuje się na dowolny niepasujący kwadrat w siatce\E
meczeE
źródło
Poślizg , 20 + 2 = 22 bajtów
Więc Slip wciąż jest zepsuty jak zawsze, ale chociaż raz było to wyzwanie, które mogło faktycznie zrobić. Nigdy nie został tak zaprojektowany, aby być tak golfowym, więc nigdy nie pokona Ślimaków: P
Potrzebuje
r
flagi (bez powtarzających się komórek), aby zakończyć.Wypróbuj online . Wyjście to ścieżka przyjęta dla prawdy, pusta dla fałszu.
źródło
Siatkówka , 87 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
O ile przetwarzanie łańcuchów 2D jest możliwe w Retina (lub ogólnie .NET regex), nie jest to dokładnie zwięzłe ...
Wyjaśnienie
Jest to wypełnienie zalewowe, które oznacza wszystkie komórki, do których dociera woda
S
. Czyni to poprzez dopasowanie znaków, które mogą zostać osiągnięte, a następnie je do transliteracjiS
zT
-mode. To wypełnienie zalewowe przechodzi przez obie przestrzenie iE
. Na+
początku powtarza to, dopóki wyjście nie przestaje się zmieniać.Jeśli chodzi o rzeczywiste wyrażenie regularne, zawiera dwa osobne przypadki:
Odpowiada to spacji lub
E
dokładnie jednej komórce poniżejS
. Dopasowywanie w pionie odbywa się poprzez zliczanie prefiksu w bieżącej linii za pomocą grup równoważących, dzięki czemu możemy zapewnić, że położenie w poziomie jest takie samo. Ten dba o spadającą wodę.Jest to bardzo podobne: pasuje do znaku
S
i, jeśli jest dostępny, przed i po znaku, pod warunkiem, że znak bezpośrednio podS
znakiem to#
. Dzięki temu woda rozlewa się po ziemi.Kiedy skończymy, bardzo łatwo będzie ustalić, czy woda osiągnęła
E
. Jeśli tak, toE
został usunięty z ciągu w zalewie, a jeśli nie,E
to nadal tam jest. Policzmy więc liczbęE
s:Ale teraz jest to
0
(co uważam za fałszywe) w przypadku prawdziwych przypadków testowych i1
(które uważam za prawdziwe) w przypadku fałszywych przypadków testowych. Możemy to bardzo łatwo odwrócić, licząc liczbę0
s w tym wyniku:Gotowy.
źródło