Na podstawie pomysłu zasugerowanego przez Zgarba .
Statek kosmiczny porusza się po zwykłej siatce 3D. Komórki siatki są indeksowane liczbami całkowitymi w prawym układzie współrzędnych xyz . Statkiem rozpoczyna się od początku, wskazując po dodatniej x osi, przy czym dodatni z oś skierowaną do góry.
Statek kosmiczny będzie latał trajektorią określoną przez niepustą sekwencję ruchów. Każdy ruch jest albo F
(w górę), co powoduje, że statek kosmiczny przesuwa się o jedną komórkę w kierunku, w którym jest skierowany, lub o jeden z sześciu obrotów UDLRlr
. Odpowiada to skokowi, odchyleniu i przewróceniu w następujący sposób:
Dzięki Zgarbowi za stworzenie diagramu.
U
p iD
własne zmieniają skok statku kosmicznego o 90 stopni (gdzie kierunek odpowiada ruchowi nosa statku kosmicznego).L
eft iR
ight zmieniają odchylenie statku kosmicznego o 90 stopni. Są to zwykłe skręty w lewo i prawo.l
eft ir
ight to ruchy toczenia o 90 stopni, których kierunek wskazuje, które skrzydło porusza się w dół.
Pamiętaj, że należy je zawsze interpretować w stosunku do statku kosmicznego, aby odpowiednie osie obracały się wraz z nim.
Z matematycznego punktu widzenia statek kosmiczny początkowo znajduje się w pozycji (0, 0, 0)
, wskazując wzdłuż (1, 0, 0)
wektora, (0, 0, 1)
skierowany w górę. Obroty odpowiadają następującym matrycom zastosowanym w układzie współrzędnych:
U = ( 0 0 -1 D = ( 0 0 1
0 1 0 0 1 0
1 0 0 ) -1 0 0 )
L = ( 0 -1 0 R = ( 0 1 0
1 0 0 -1 0 0
0 0 1 ) 0 0 1 )
l = ( 1 0 0 r = ( 1 0 0
0 0 1 0 0 -1
0 -1 0 ) 0 1 0 )
Powinieneś wyprowadzić ostateczną pozycję statku kosmicznego jako trzy liczby całkowite x , y , z . Dane wyjściowe mogą być trzema oddzielnymi liczbami całkowitymi lub listą lub ciągiem je zawierającym. Mogą być w dowolnej spójnej kolejności, o ile ją określisz.
Możesz napisać program lub funkcję, pobierając dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji i wypisując wynik przez STDOUT (lub najbliższą alternatywę), wartość zwracaną funkcji lub parametr funkcji (wyjściowej).
Obowiązują standardowe zasady gry w golfa .
Przypadki testowe
F => (1, 0, 0)
FDDF => (0, 0, 0)
FDDDF => (1, 0, 1)
LrDDlURRrr => (0, 0, 0)
UFLrRFLRLR => (1, 0, 1)
FFrlFULULF => (3, 0, -1)
LLFRLFDFFD => (-2, 0, -2)
FrrLFLFrDLRFrLLFrFrRRFFFLRlFFLFFRFFLFlFFFlUFDFDrFF => (1, 5, 7)
FUrRLDDlUDDlFlFFFDFrDrLrlUUrFlFFllRLlLlFFLrUFlRlFF => (8, 2, 2)
FFLrlFLRFFFRFrFFFRFFRrFFFDDLFFURlrRFFFlrRFFlDlFFFU => (1, 2, -2)
FLULFLFDURDUFFFLUlFlUFLFRrlDRFFFLFUFrFllFULUFFDRFF => (-3, -2, -3)
Przykład działał
Oto pośrednie etapy UFLrRFLRLR
przypadku testowego. Tutaj wszystkie pośrednie współrzędne i wektory kierunkowe są podane w początkowym globalnym układzie współrzędnych (w przeciwieństwie do jednego lokalnego dla statku kosmicznego):
Cmd. Position Forward Up
( 0, 0, 0) ( 1, 0, 0) ( 0, 0, 1)
U ( 0, 0, 0) ( 0, 0, 1) (-1, 0, 0)
F ( 0, 0, 1) ( 0, 0, 1) (-1, 0, 0)
L ( 0, 0, 1) ( 0, 1, 0) (-1, 0, 0)
r ( 0, 0, 1) ( 0, 1, 0) ( 0, 0, 1)
R ( 0, 0, 1) ( 1, 0, 0) ( 0, 0, 1)
F ( 1, 0, 1) ( 1, 0, 0) ( 0, 0, 1)
L ( 1, 0, 1) ( 0, 1, 0) ( 0, 0, 1)
R ( 1, 0, 1) ( 1, 0, 0) ( 0, 0, 1)
L ( 1, 0, 1) ( 0, 1, 0) ( 0, 0, 1)
R ( 1, 0, 1) ( 1, 0, 0) ( 0, 0, 1)