Zgarb tarafından önerilen bir fikre dayanarak .
Bir uzay gemisi düzenli bir 3B ızgara etrafında hareket ediyor. Izgaranın hücreleri, sağ elle koordinat sistemi xyz'de tamsayılarla indekslenir . Uzay gemisi başlangıçta pozitif x ekseni boyunca , pozitif z ekseni yukarı bakacak şekilde başlar.
Uzay gemisi, boş olmayan bir hareket dizisi ile tanımlanan bir yörünge boyunca uçacaktır. Her hareket ya F
( ya da ileri) olup, uzay gemisinin bir hücreyi baktığı yöne doğru hareket ettirmesini ya da altı rotasyondan birini gerçekleştirmesini sağlar UDLRlr
. Bunlar aşağıdaki gibi eğim, sapma ve ruloya karşılık gelir:
Diyagramı oluşturduğu için Zgarb'a teşekkürler.
U
p veD
kendi uzay gemisinin perdesini 90 derece değiştirir (burada yön uzay gemisinin burnunun hareketine karşılık gelir).L
eft veR
ight uzay gemisinin sapmasını 90 derece değiştirir. Bunlar sadece düzenli sola ve sağa dönüşlerdir.l
eft ver
ight 90 derecelik yuvarlanma hareketleridir, burada yön hangi kanadın aşağı doğru hareket ettiğini gösterir.
Bunların daima uzay gemisine göre yorumlanması gerektiğini unutmayın, böylece ilgili eksenler onunla birlikte dönecektir.
Matematiksel terimlerle, uzay gemisi başlangıçta vektör (0, 0, 0)
boyunca, yukarı bakacak şekilde pozisyondadır . Döndürmeler, koordinat sistemine uygulanan aşağıdaki matrislere karşılık gelir:(1, 0, 0)
(0, 0, 1)
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 )
Uzay gemisinin son konumunu üç x , y , z tamsayı olarak çıkarmalısınız . Çıktı üç ayrı tamsayı veya bunları içeren bir liste veya dize olabilir. Belirttiğiniz sürece tutarlı bir sırada olabilirler.
STDIN (veya en yakın alternatif), komut satırı bağımsız değişkeni veya işlev bağımsız değişkeni ile girdi alarak ve sonucu STDOUT (veya en yakın alternatif), işlev dönüş değeri veya işlev (çıkış) parametresi aracılığıyla çıktı alarak bir program veya işlev yazabilirsiniz.
Standart kod golf kuralları geçerlidir.
Test Durumları
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)
Çalışılan örnek
İşte UFLrRFLRLR
test senaryosunun ara adımları . Burada, tüm ara koordinatlar ve yön vektörleri ilk küresel koordinat sisteminde (uzay gemisinin bir yerelinin aksine) verilir:
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)