To wyzwanie odbywa się na siatce.
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
Ten ma wymiary 10 x 10, ale może mieć dowolny prostokątny kształt.
Na tej siatce są cztery kierunki. Góra, dół, lewo i prawo.
Zadanie polega na narysowaniu ścieżki rozpoczynającej się od wielkiej litery początkowej. W tym przykładzie przejdzie bezpośrednio w górę od U.
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| U |
+----------+
Ścieżka pójdzie w górę i będzie się składać ze znaków kropki (.), Dopóki nie uderzy o ścianę, kiedy zakończy się gwiazdką (*).
+----------+
| * |
| . |
| . |
| . |
| . |
| . |
| . |
| . |
| U |
+----------+
Oprócz początków ścieżki istnieją również zmieniacze kierunku, reprezentowane przez małe litery początkowe.
+----------+
| |
| |
| |
| r.....*|
| . |
| . |
| . |
| . |
| U |
+----------+
Również wielka litera X stanowi przeszkodę, która zakończy ścieżkę.
+----------+
| |
| |
| |
| |
| r...*X |
| . |
| . |
| . |
| U |
+----------+
Zasady
- Dane wejściowe to ciąg znaków składający się z ramki (składającej się ze znaków |, - i +) zawierający znaki oznaczające początek ścieżki, zmianę kierunku i przeszkody.
- Twój kod powinien dodawać znaki kropki, aby podążać ścieżką opisaną przez startery i zmieniacze kierunku oraz gwiazdkę, gdy / jeśli ścieżka styka się ze ścianą lub przeszkodą.
- Początek ścieżki może być wiele.
- Kod nadal zakończy się bezbłędnie, jeśli ścieżka opisuje pętlę.
- Jeśli ścieżka spotyka się z początkiem ścieżki, będzie działać jak zmieniacz kierunku.
- Poproszę kod golfowy, kod niskobajtowy i brak standardowych luk.
- Zawsze wolę linki do tłumacza online.
Przypadki testowe
1: Prosty
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| . |
| . |
| . |
| . |
| . |
| U |
+----------+
2: Skręt w prawo
+----------+
| |
| |
| |
| r |
| |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| r.....*|
| . |
| . |
| . |
| . |
| U |
+----------+
3: Rozdroże
+----------+
| |
| |
| |
| r d |
| |
| u l |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| . r..d |
| . . . |
| u....l |
| . |
| . |
| U |
+----------+
4: 4 Przecinanie ścieżek
+----------+
| D |
| |
| |
|R |
| |
| L|
| |
| |
| U |
+----------+
+----------+
| * D |
| . . |
| . . |
|R........*|
| . . |
|*........L|
| . . |
| . . |
| U * |
+----------+
5: Pierwsza pętla
+----------+
| |
| |
| |
| r d |
| |
| u l |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| r..d |
| . . |
| u..l |
| . |
| . |
| U |
+----------+
6: Starter jako zmieniacz
+----------+
| |
| |
| |
| L |
| |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
|*..L |
| . |
| . |
| . |
| . |
| U |
+----------+
7: Prosta pętla
+----------+
| |
| |
| |
| |
| r l |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| |
| r..l |
| . |
| . |
| . |
| U |
+----------+
8: Tight Knot
+----------+
| |
| |
| |
| d l |
| r u |
| r u |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| d..l |
| .r.u |
| r.u |
| . |
| . |
| U |
+----------+
9: Przeszkoda
+----------+
| |
| |
| |
| |
| r X |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| |
| r...*X |
| . |
| . |
| . |
| U |
+----------+
Kształt 10: S.
+----------+
|r d |
| |
| XXXXXXXX|
| d l |
|ul |
|XXXXXXX |
| |
|R u |
| |
+----------+
+----------+
|r.....d |
|. * |
|. XXXXXXXX|
|.d......l |
|ul . |
|XXXXXXX . |
| . |
|R.......u |
| |
+----------+
11: 4-kierunkowy węzeł
+----------+
| D |
| |
| r |
|R d |
| |
| u L|
| l |
| |
| U |
+----------+
+----------+
| * D |
| . . |
| r.....*|
|R....d. |
| .... |
| .u....L|
|*.....l |
| . . |
| U * |
+----------+
12: Zajęte skrzyżowania
+----------+
|rrrrr rrrd|
| rlrl |
|ul rrd |
|ruX X |
|udl ll |
|ull |
|rlr |
|rdr d |
|Uruull |
+----------+
+----------+
|rrrrr.rrrd|
|.rlrl .|
|ul rrd .|
|ruX.X. .|
|udl.ll .|
|ull. .|
|rlr. .|
|rdr..d .|
|Uruull *|
+----------+
13: Rozpoczyna się w Edge
+----------+
| U |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
+----------+
| U |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
14: Przekraczanie martwych ścieżek
+----------+
| |
| |
| |
| R |
| |
| |
| |
| |
| U|
+----------+
+----------+
| *|
| .|
| .|
| R..*|
| .|
| .|
| .|
| .|
| U|
+----------+
Odpowiedzi:
JavaScript (ES6),
191 183181 bajtówDzięki @tsh za pomoc w naprawieniu błędu
Pobiera dane wejściowe jako macierz znaków. Wyjścia poprzez modyfikację wejścia.
Wypróbuj online!
Skomentował
źródło
[...""+a].map
może stworzyć tablicę o co najmniej 2x długości a. Nie jestem pewien, czy to pomaga.(a+0)[n]
zapisuje bajt, mimo żen
teraz należy go zainicjować.Python 2 ,
283279293288279 bajtówWypróbuj online!
Pobiera listę list.
Wyjście poprzez modyfikację tablicy wejściowej.
źródło
Perl 5,
203188166 bajtówTIO
Jak to działa
$s=$_
aby zapisać dane wejściowe w$s
celu przywrócenia zmieniaczy małych liter.$_|=$s
ponieważ bitowa lub spacjanie ulegnie zmianie,
.
a*
małe literyurld
zostaną przywrócone za pomocą bitowej lub operacji./\n/;$n='.'x"@-"
aby uzyskać „szerokość” i$n
dopasować czasy „szerokości” dowolnego znaku$l='\K[ a-z](?=';$t='([-|X])?'
aby zmniejszyć długość wyrażenia regularnego;$l
aby dopasować małą literęurld
lub spację na ścieżce,$t
aby dopasować terminator.Po wymianie:
(?| R[.*]*\K[ a-z](?=([-|X])?) | ([-|X])?\K[ a-z](?=[.*]*L) | D$n(?:[.*]$n)*\K[ a-z](?=$n([-|X])?) | ([-|X])?$n\K[ a-z](?=$n([.*]$n)*U) )
/e
na eval,/s
dzięki czemu.
(wewnątrz$n
) pasuje również znak nowej linii$&eq$"?$1?'*':'.':uc$&
jeśli dopasowane jest spacją, jeśli terminator jest dopasowany*
inaczej.
inaczej wielkie litery.źródło
$s
w stopce.$s
służy do zapisywania danych wejściowych i zabezpieczania małych liter, ponieważ podczas rysowania ścieżki są przełączane na wielkie literyCzysty , 409 bajtów
Wypróbuj online!
źródło
Python 2 , 250 bajtów
Wypróbuj online!
Pobiera listę ciągów znaków 1-znakowych, co zostało wyraźnie dozwolone przez PO.
Zmienia listę na miejscu.
Dla łatwiejszego wejścia / wyjścia użyj tego .
źródło