Berdasarkan ide yang disarankan oleh Zgarb .
Pesawat ruang angkasa bergerak di sekitar kisi 3D biasa. Sel-sel grid diindeks dengan bilangan bulat dalam sistem koordinat tangan kanan, xyz . Pesawat ruang angkasa dimulai pada titik asal, menunjuk sepanjang sumbu x positif , dengan sumbu z positif mengarah ke atas.
Pesawat ruang angkasa akan terbang di sepanjang lintasan yang ditentukan oleh urutan gerakan yang tidak kosong. Setiap gerakan adalah salah satu F
(atau ke depan) yang membuat pesawat ruang angkasa bergerak satu sel ke arah yang menghadapnya, atau salah satu dari enam rotasi UDLRlr
. Ini sesuai dengan pitch, yaw and roll sebagai berikut:
Terima kasih kepada Zgarb untuk membuat diagram.
U
p danD
miliki sendiri perubahan nada pesawat ruang angkasa sebanyak 90 derajat (di mana arahnya sesuai dengan pergerakan hidung pesawat ruang angkasa).L
EFT dan EIGHTR
mengubah yaw pesawat ruang angkasa sebesar 90 derajat. Mereka belok kiri dan kanan biasa.l
Et dan Eightr
adalah gerakan menggulung 90 derajat, di mana arahnya menunjukkan sayap mana yang bergerak ke bawah.
Perhatikan bahwa ini harus selalu ditafsirkan relatif terhadap pesawat ruang angkasa sehingga sumbu yang relevan berputar bersama dengannya.
Dalam istilah matematika, pesawat ruang angkasa pada awalnya berada di posisi (0, 0, 0)
, menunjuk sepanjang (1, 0, 0)
vektor, dengan (0, 0, 1)
menunjuk ke atas. Rotasi sesuai dengan matriks berikut yang diterapkan pada sistem koordinat:
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 )
Anda harus menampilkan posisi akhir dari pesawat ruang angkasa sebagai tiga bilangan bulat x , y , z . Output mungkin tiga bilangan bulat terpisah atau daftar atau string yang mengandung mereka. Mereka mungkin berada dalam urutan yang konsisten selama Anda menentukannya.
Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter function (out).
Aturan standar kode-golf berlaku.
Uji Kasus
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)
Contoh yang berhasil
Berikut adalah langkah-langkah lanjutan dari UFLrRFLRLR
test case. Di sini, semua koordinat menengah dan vektor arah diberikan dalam sistem koordinat global awal (sebagai lawan dari satu lokal ke pesawat ruang angkasa):
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)