TL; DR: Biorąc pod uwagę tablicę znaków i robota w początkowej pozycji tablicy, napisz algorytm niż można odczytać ciąg znaków z ruchami (
F
dla „idź do przodu”,R
dla „obróć o 90 stopni w prawo” iL
dla „obróć o 90 stopni left ”) i obliczyć pozycję końcową robota. Więcej szczegółów w pełnym tekście.
Mamy w domu bardzo proste programowalne urządzenie dla dzieci: mały pojazd z przyciskami do jazdy do przodu, skrętu o 90 stopni w lewo lub o 90 stopni w prawo. Coś podobnego do tego:
Mamy również piankową matę z takimi literami:
Wszystko to ma na celu nauczyć dzieci alfabetu i podstaw programowania jednocześnie.
Wyzwanie
Załóżmy, że losowo ułożyliśmy naszą matę piankową w następujący sposób:
+---+---+---+---+---+---+---+
| E | R | L | B | I | X | N |
+---+---+---+---+---+---+---+
| O | A | Q | Y | C | T | G |
+---+---+---+---+---+---+---+
| F | W | H | P | D | Z | S |
+---+---+---+---+---+---+---+
| K | V | U | M | J |
+---+---+---+---+---+
| |
+---+
Załóżmy również, że zmodyfikowaliśmy pojazd, aby podczas programowania polecenia „iść do przodu” pojazd poruszał się do przodu dokładnie o rozmiar jednego kwadratu na macie. Tak więc, jeśli pojazd znajduje się na U
placu i jedzie na północ, zatrzymuje się dokładnie na P
placu.
Wszystkie instrukcje są przekazywane pojazdowi, zanim zacznie się on poruszać, a są to:
F
: Pojazd jedzie do następnego kwadratu.R
: Pojazd obraca się o 90 stopni w prawo na swoim miejscu (bez dalszego ruchu).L
: Pojazd obraca się o 90 stopni w lewo na swoim miejscu (bez dalszego ruchu).
Po wydaniu instrukcji można nacisnąć przycisk „GO” i wysłać pojazd na określoną pozycję, ponieważ będzie on postępować zgodnie z każdą instrukcją w podanej kolejności. Możesz więc powiedzieć dziecku, aby wstawiło potrzebne instrukcje dla pojazdu, aby przejść do danej litery.
Musisz napisać najkrótszy program / funkcję, która przetwarza string
(parametr wejściowy) z zestawem instrukcji i oblicza literę zatrzymania pojazdu (wynik string
).
Detale:
- Pojazd zawsze zaczyna się od pustego kwadratu na dole i jest skierowany na północ (w kierunku
U
kwadratu). - Ciąg wejściowy będzie zawierać tylko litery
F
,R
,L
orazG
(za pomocą przycisku „Go”). Możesz użyć małych liter dla maty i instrukcji, jeśli wolisz. - Algorytm musi być zgodny z każdą instrukcją w ciągu przed pierwszą
G
(każda następna instrukcja jest ignorowana, gdy pojazd ruszy). - Jeśli pojazd wyjdzie z maty w danym momencie (nawet jeśli łańcuch wejściowy nie został całkowicie przetworzony), algorytm musi zwrócić łańcuch
Out of mat
. - Jeśli nie, algorytm musi zwrócić literę, w której zatrzymał się pojazd. Punkt początkowy liczy się jako
znak (lub pusty ciąg).
Przykłady:
Input: FFG
Output: P
Input: FRFRFG
Output: Out of mat
Input: RRFFG
Output: Out of mat
Input: FFFRFFLFG
Output: X
Input: FFFRFFLF
Output: <-- Nothing or a whitespace (the robot has not started moving)
Input: FFFRRFFFG
Output: <-- Nothing or a whitespace (the robot has returned to the starting point)
Input: RRRRRLFFFLFFRFRFGFFRRGRFF
Output: L (Everything after the first G is ignored)
To jest golf golfowy , więc może wygrać najkrótszy program dla każdego języka!
źródło
@
pozycją początkową i spacjami poza matą, więc ta konfiguracja byłabyERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(przy różnych odstępach, SE pomieszała)Odpowiedzi:
JavaScript (ES6),
194176169163 bajtówOszczędność niektórych bajtów dzięki @Luke i @Arnauld.
Nie golfowany:
źródło
false
z!1
every
metoda to obsługuje.(s,p=35,d=3,t='ERLBIXN1OAQYCTG1FWHPDZS11KVUMJ11111 11')=>[...s].every(i=>i=='L'?d--:i=='R'?d++:i=='F'?+t[p+=[1,8,-1,-8][d%4]]||!t[p]?p=1/0:1:0)?'':t[p]||'Out of mat'
[1,8,-1,-8]
tablicy, dzięki!Python 2 , 235 bajtów
Wypróbuj online!
źródło
Python 3 ,
226231241 bajtówDruga edycja; powinien działać teraz. Znowu mnóstwo optymalizacji do zrobienia.
Wypróbuj online!
źródło
Wolfram Language / Mathematica, 300 bajtów
Nie golfowany:
źródło