Basado en una idea sugerida por Zgarb .
Una nave espacial se mueve alrededor de una cuadrícula 3D normal. Las celdas de la cuadrícula se indexan con números enteros en un sistema de coordenadas diestro, xyz . La nave espacial comienza en el origen, apuntando a lo largo del eje x positivo , con el eje z positivo apuntando hacia arriba.
La nave espacial volará a lo largo de una trayectoria definida por una secuencia de movimientos no vacía. Cada movimiento es F
(hacia adelante), lo que hace que la nave espacial se mueva una celda en la dirección de su orientación, o una de las seis rotaciones UDLRlr
. Esto corresponde a cabeceo, guiñada y balanceo de la siguiente manera:
Gracias a Zgarb por crear el diagrama.
U
p yD
own cambian el tono de la nave espacial en 90 grados (donde la dirección corresponde al movimiento de la nariz de la nave espacial).L
eft yR
ight cambian el guiñada de la nave espacial en 90 grados. Son solo giros regulares a izquierda y derecha.l
eft yr
ight son movimientos de balanceo de 90 grados, donde la dirección indica qué ala se mueve hacia abajo.
Tenga en cuenta que estos siempre deben interpretarse en relación con la nave espacial para que los ejes relevantes roten junto con ella.
En términos matemáticos, la nave espacial está inicialmente en posición (0, 0, 0)
, apuntando a lo largo del (1, 0, 0)
vector, (0, 0, 1)
apuntando hacia arriba. Las rotaciones corresponden a las siguientes matrices aplicadas al sistema de coordenadas:
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 )
Deberías mostrar la posición final de la nave espacial como tres enteros x , y , z . La salida puede ser tres enteros separados o una lista o cadena que los contiene. Pueden estar en un orden constante siempre que lo especifique.
Puede escribir un programa o función, tomando datos a través de STDIN (o la alternativa más cercana), argumento de línea de comandos o argumento de función y generando el resultado a través de STDOUT (o alternativa más cercana), valor de retorno de función o parámetro de función (out).
Se aplican reglas estándar de código de golf .
Casos de prueba
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)
Ejemplo trabajado
Aquí están los pasos intermedios del UFLrRFLRLR
caso de prueba. Aquí, todas las coordenadas intermedias y los vectores de dirección se dan en el sistema de coordenadas global inicial (en oposición a uno local de la nave espacial):
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)