Zgarb가 제안한 아이디어를 기반으로합니다 .
우주선이 일반 3D 그리드를 따라 움직입니다. 그리드의 셀은 오른쪽 좌표계 xyz 에서 정수로 색인됩니다 . 우주선은 원점에서 시작하여 양의 x 축을 따라 , 양의 z 축은 위쪽을 가리 킵니다.
우주선은 비어 있지 않은 일련의 움직임으로 정의 된 궤도를 따라 날아갈 것입니다. 각 움직임은 F
우주선이 향하는 방향으로 하나의 셀을 이동 시키거나 6 회전 중 하나를 이동시키는 (또는) 방향 UDLRlr
입니다. 이들은 다음과 같이 피치, 요 및 롤에 해당합니다.
다이어그램을 생성 한 Zgarb에게 감사합니다.
U
p와D
자신은 우주선의 피치를 90도 변경합니다 (여기서 방향은 우주선의 코의 움직임에 해당합니다).L
송금 및R
ight 90도 우주선의 요 변화. 그들은 단지 규칙적인 좌회전과 우회전입니다.l
eft와r
ight는 90도 회전 운동이며, 방향은 어느 날개가 아래로 움직이는지를 나타냅니다.
이것들은 항상 우주선과 관련하여 해석되어야하므로 관련 축이 함께 회전해야합니다.
수학 용어로 우주선은 처음에 위치 (0, 0, 0)
를 향하고 (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 )
우주선의 최종 위치를 세 개의 정수 x , y , z 로 출력해야합니다 . 출력은 세 개의 개별 정수 또는이를 포함하는 목록 또는 문자열 일 수 있습니다. 지정하는 한 일관된 순서로 정렬 될 수 있습니다.
STDIN (또는 가장 가까운 대안), 명령 행 인수 또는 함수 인수를 통해 입력을 받고 STDOUT (또는 가장 가까운 대안), 함수 리턴 값 또는 함수 (out) 매개 변수를 통해 결과를 출력하는 프로그램 또는 함수를 작성할 수 있습니다.
표준 코드 골프 규칙이 적용됩니다.
테스트 사례
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)
작동 예
UFLrRFLRLR
테스트 케이스 의 중간 단계는 다음과 같습니다 . 여기에서 모든 중간 좌표와 방향 벡터는 우주선에 대한 하나의 로컬과는 대조적으로 초기 전역 좌표 시스템으로 제공됩니다.
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)