Twoje wyzwanie otrzymuje układ więzienny, aby dowiedzieć się, czy któryś z więźniów może uciec.
Wejście
Wejście może być w żadnym rozsądnym formacie takim jak łańcuch, tablica tablicy tablic itd. Wejście będzie się składać z trzech znaków, w tym przypadku #
, P
i przestrzeni. Dane wejściowe niekoniecznie będą zawierać wszystkie trzy znaki.
#
: ŚcianaP
: Więzień- spacja: pusta przestrzeń
Przykładowe dane wejściowe będą wyglądały następująco:
#####
# #
# P #
# #
#####
Wynik
Prawda / falsey, czy więzienie jest bezpieczne, czy nie. Więzienie jest bezpieczne tylko wtedy, gdy może pomieścić wszystkich więźniów. Jeśli jakikolwiek więzień może uciec, nie jest to bezpieczne.
Więzień może uciec, jeśli nie jest całkowicie otoczony murem. Łączenie po przekątnej jest całkowicie zamknięte.
Przypadki testowe
############# Truthy
# P # P# #
# # # P #
#############
############# Truthy
# P P #
# # # P #
#############
############# Falsey
# P # P# #
# # # P #
########## ##
#### Truthy
# #
# #
# P ####
####
P Falsey
### Falsey
# #
# #
### P
code-golf
ascii-art
decision-problem
grid
path-finding
TheLethalCoder
źródło
źródło
Odpowiedzi:
Ślimaki , 13 bajtów
Wypróbuj online!
Drukuje
0
dla niepewnych więzień i rozmiar obwiedni wejściowej dla bezpiecznych więzień.Chodzi o to, aby upewnić się, że nie możemy znaleźć ścieżki od
P
komórki do poza granicami (~
) poruszającej się tylko ortogonalnie (o
) przez spacje.t
Jest teleport tak, że niezależnie gdzie spróbujemy mecz próbuje wszystkie możliwe pozycje wyjściowe do znalezieniaP
.źródło
C # (.NET Core) ,
485 480 474 470 421408 bajtówAbsolutnie złe narzędzie i podejście, ale jednak ...
' '
je32
w porównaniach.Wypróbuj online!
Zasadniczo rozszerzam pozycje P, ilekroć jest biała przestrzeń, aż osiągnie (lub nie) granicę układu.
Niektóre licencje:
char[][]
jako danych wejściowych dla układu.0
jako niepewne i1
bezpieczne.źródło
1>0
i1<0
są krótsze niżtrue
ifalse
.==0
zostać<1
? Masz co najmniej 1 bajt niepotrzebnych białych znaków. Czy możesz usunąćnew[]
s? (Nie zawsze działa, ale czasem się podobaint[] n = {1,2,3};
).{m[x][y]= p; c.Push(new[]
->{m[x][y]=p;c.Push(new[]
char
s doint
s, więc uważam, że możesz zastąpić==' '
to,==32
aby zapisać bajty. Powinieneś być w stanie to zrobić również w podobnych porównaniach.Perl 5 , 69 bajtów
-10 bajtów dzięki @Grimy .
-2 bajty dzięki @Neil .
77 bajtów kodu +
-p0
flagi.Wypróbuj online!
Kilka krótkich wyjaśnień:
Chodzi o to, aby umieścić
P
wszędzie, gdzie więźniowie mogą się udać. Jeśli któryś z nichP
znajduje się na pierwszej / ostatniej linii lub pierwszej / ostatniej kolumnie, więźniowie mogą się tam udać i uciec, co oznacza, że więzienie nie jest bezpieczne.s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
zastępuje miejsca na prawej lub ryczećP
zP
lub miejsca po lewej stronie lub na górzeP
.Na koniec
/\A.*P|P.*\Z|^P|P$/m
sprawdza, czy linia zaczyna się, czy kończy na aP
, czy jestP
na pierwszej lub ostatniej linii.źródło
*
lub+
najdłuższym dopasowaniem, jaki może zrobić, jest rozmiar linii ... Teraz oczywiście, jeśli porównasz z podejściem bardziej ręcznym, na przykład na podstawie tablic , to tak, jest to dość nieefektywne!s/P(.{@{-}})? | (.{@{-}})?P/P$1$2P/s
.s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
.JavaScript (ES6),
134133 bajtówPobiera dane wejściowe jako tablicę tablic znaków. Zwraca
0
(niepewny) lub1
(bezpieczny).Przypadki testowe
Pokaż fragment kodu
źródło
&&
prostu być&
?|
. Dzięki!JavaScript (ES6), 121 bajtów
Pobiera dane wejściowe jako ciąg prostokątny rozdzielany znakiem nowej linii. Zwraca 0 dla niepewnych i 1 dla bezpiecznych. Opierając się na mojej odpowiedzi na Detect Failing Castles , chociaż bardziej efektywne byłoby testowanie uciekającego więźnia na każdym kroku, niż po zakończeniu zwiedzania więzienia.
źródło
Oktawa,
6455 bajtówWypróbuj online!
lub
Sprawdź wszystkie przypadki testowe!
Wyjaśnienie:
źródło
APL (Dyalog Classic) , 40 bajtów
Wypróbuj online!
'# '⍳⍵
kodowania'#'
,' '
,'P'
jak: 0 1 2(⌽1,⍉)⍣4
surround z 1s(××{1⊃⌈/⍵,⍉⍵}⌺3 3)⍣≡
maksymalna liczba sąsiadów wypełnia niezerowe komórki⊃2≠
czy nie mamy 2 w lewym górnym rogu?źródło
Stax , 35 bajtów CP437
Wypróbuj online!
Z pewnością potrafi to zrobić język golfowy bez wewnętrznego systemu wyszukiwania ścieżek!
Wyjaśnienie
Do wyjaśnienia używa rozpakowanego formatu.
źródło
SmileBASIC,
154146 bajtówMiałem nadzieję, że odpowiedź wypełniająca powódź będzie krótsza niż ta.
Zamień
31
na odpowiedni znak ASCII.źródło