A może nie jest to tak naprawdę labirynt, ale jednak.
Zasady:
Wejście jest ciągiem dwóch linii, składające się z
*
,1
,x
iX
. Ten sznurek jest labiryntem do przejścia. Linie mają równą długość .Możesz wziąć dane wejściowe jako ciąg znaków za pomocą
,
(przecinek) lub dowolny wygodny separator między tymi dwoma wierszami. Lub możesz wziąć obie linie jako osobne argumenty dla swojej funkcji.Wynik to liczba kroków, które należy wykonać, aby wyjść z ciągu (ostatni krok to etap, który wyprowadza cię z łańcucha).
Zaczynasz w lewym górnym rogu (wyższa linia), przed pierwszym symbolem.
Dla każdego kroku przesuwasz się do przodu o jeden symbol (od n-tego do (n + 1) pozycji ). Następnie, w zależności od postaci, na którą stąpasz, wynik jest inny. Oto, co robi każdy znak:
*
- nic. Po prostu stąpaj po nim normalnie.x
- po wejściu na niego zmień linię, ale pozostań w tej samej poziomej odległości od początku. Na przykład nadepnąłeś na trzecią pozycję wyższej linii i spotkałeś tu małe literyx
. Następnie natychmiast przechodzisz do dolnej linii, ale znowu na trzeciej pozycji.X
- przełącz linię i przejdź do następnej pozycji. Przykład jest tam taki sam, ale przesuwasz się również z trzeciej do czwartej pozycji (w ten sposób znajdujesz się w drugiej linii na czwartej pozycji).1
- po prostu przejdź do przodu o jeszcze jedną pozycję.
Gdy każda postać wykona swoją pracę, zostaje zastąpiona spacją i przestaje „działać”.
Przykłady podano poniżej.
Wejście :
x *
Jak powiedziano wcześniej, zaczynasz przed pierwszym symbolem pierwszego wiersza. Pierwszy krok przenosi cię na literę,
x
a ta litera powoduje przejście do drugiej linii. Literax
nie działa już jakox
, ale została zastąpiona przez*
. Będzie to bardziej odpowiednie w tych ostatnich przykładach. Jesteś teraz na gwiazdce w dolnej linii i nic ci to nie zrobiło.Drugi krok przesuwa cię do przodu i wychodzisz ze sznurka, więc labirynt jest ukończony i zajął 2 kroki.
Wyjście
2
.Wejście :
xX* x1*
Pierwszy krok : idziesz dalej
x
, co przenosi cię nax
dolną linię. Oto reguła, która mówi, że użyta postać jest zastąpiona gwiazdką. Następnie wracasz do pierwszej linii, ale już nie jestx
ma, ponieważ została użyta i stała się gwiazdką. Poruszasz się więc bezpiecznie tą gwiazdką i krok jest zakończony (jesteś teraz na pierwszej pozycji pierwszego wiersza).Drugi krok : idziesz dalej
X
, to popycha cię do dolnej linii, a następnie popycha do przodu. Znajdujesz się teraz na trzeciej pozycji drugiej linii (gwiazdka), nigdy nie odwiedziłeś drugiej pozycji (która zawiera1
).Trzeci krok : idziesz naprzód, wychodząc ze sznurka.
Wyjście :
3
.
Przypadki testowe:
Wejście:
*1* xxx
Wyjście:
3
. (bo1
skacze na trzecią pozycję). Tam nigdy nie odwiedzasz drugiej linii, ale wymaga to części danych wejściowych.Wejście:
*X*1*x x*1xx*
Wyjście:
4
.Wejście:
1x1x ***X
Wyjście:
3
.Wejście:
1*x1xxx1*x x*x1*11X1x
Wyjście:
6
.Wejście:
xXXXxxx111* **xxx11*xxx
Wyjście:
6
.
źródło
"\n\n"
jest ciągiem dwóch linii ...1
, jak zaczynasz przed pierwszą linią, a następnie przesuwasz się o jeden krok do przodu, a następnie kończysz labirynt ...Odpowiedzi:
Ślimaki, 34 bajty
Rozszerzony:
Dla ścieżki, która wykonuje N kroków, program znajduje jedno udane dopasowanie dla każdego przejścia 0 kroków, 1 kroków, ..., N - 1 kroków.
źródło
Haskell,
686665 bajtówFunkcja
#
przyjmuje obie linie jako osobne parametry. Przykład użycia:"1x1x" # "***X"
->3
.Musimy tylko policzyć gwiazdy, na
*
które nadepniemy, plus 1 za odejście.Edycja: @feersum zapisał bajt. Dzięki!
źródło
a>'a'
Zamiasta=='x'
?JavaScript (ES6), 119
Mniej golfa
Test
źródło
TSQL (sqlserver 2012+), 276 bajtów
Gra w golfa:
Nie golfowany:
Skrzypce
źródło
JavaScript, 211 bajtów
Zastanawiam się nad stworzeniem wersji, która pokazuje każdy krok odtwarzany jeden po drugim, wyświetlana na stronie internetowej.
Użyłem więcej bajtów, niż miałem nadzieję przy zamianie
x
z*
powodu niezmienności JSStrings
. Doceniane są sugestie dotyczące ulepszenia, szczególnie w przypadku części zamiennej.źródło