6 각형 그리드에서 움직임을 나타내는 일련의 문자를 입력하면 "포인터"의 최종 좌표가 출력됩니다.
우리의 육각형은 다음과 같이 번호가 매겨 질 것입니다 (홀수 번째 열이 약간 아래로 이동 한 직사각형 격자를 상상해보십시오) :
_____ _____ _____ _____
/ \ / \ / \ / \
/ -3,-2 \_____/ -1,-2 \_____/ 1,-2 \_____/ 3,-2 \
\ / \ / \ / \ /
\_____/ -2,-1 \_____/ 0,-1 \_____/ 2,-1 \_____/
/ \ / \ / \ / \
/ -3,-1 \_____/ -1,-1 \_____/ 1,-1 \_____/ 3,-1 \
\ / \ / \ / \ /
\_____/ -2,0 \_____/ 0,0 \_____/ 2,0 \_____/
/ \ / \ / \ / \
/ -3,0 \_____/ -1,0 \_____/ 1,0 \_____/ 3,0 \
\ / \ / \ / \ /
\_____/ -2,1 \_____/ 0,1 \_____/ 2,1 \_____/
/ \ / \ / \ / \
/ -3,1 \_____/ -1,1 \_____/ 1,1 \_____/ 3,1 \
\ / \ / \ / \ /
\_____/ \_____/ \_____/ \_____/
포인터는 (0, 0)에서 시작합니다.
지원해야 할 지침은 다음과 같습니다.
q
: 왼쪽으로 이동w
: 이동e
: 오른쪽으로 이동a
: 왼쪽으로 이동s
: 아래로 이동d
: 오른쪽 아래로 이동r
: 그리드를 시계 방향으로 회전R
: 그리드를 시계 반대 방향으로 회전
회전 명령은 포인터를 동일한 좌표로 유지하면서 전체 그리드를 회전시킵니다. (왜 qweasd
? 그들은 QWERTY 키보드의 지시 사항과 잘 어울립니다.)
이를 시각화하기 위해 포인터가 중간에서 시작한다고 가정하면 이동 명령의 기능은 다음과 같습니다.
_____
/ \
_____/ w \_____
/ \ / \
/ q \_____/ e \
\ / \ /
\_____/ \_____/
/ \ / \
/ a \_____/ d \
\ / \ /
\_____/ s \_____/
\ /
\_____/
시계 방향 회전 ( r
) 후 명령이 다시 매핑됩니다 (전체 16 진 그리드를 회전하지만 "w"는 계속 유지하는 것으로 상상해보십시오. 이는 다음과 같습니다).
_____
/ \
_____/ e \_____
/ \ / \
/ w \_____/ d \
\ / \ /
\_____/ \_____/
/ \ / \
/ q \_____/ s \
\ / \ /
\_____/ a \_____/
\ /
\_____/
마찬가지로 반 시계 방향 ( R
)으로 회전 하면 그리드가 정상으로 돌아가고 다시 반 시계 방향으로 회전하면로 다시 매핑 qwedsa
됩니다 aqweds
.
입력은 단일 문자열로 제공되어야하며 출력은 숫자가 아닌 문자 (예 : 1 2
또는 3,4
)로 결합 된 단일 문자열 이거나 정수 배열 일 수 있습니다.
이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 승리합니다.
테스트 사례 :
In Out
---------------------------------
edeqaaaswwdqqs -2, 0
dddddddddd 10, 5
wswseaeadqdq 0, 0
<empty string> 0, 0
esaaqrweesrqrq -1, 0
wrwrwrwrw -1, 0
RRssrrrs -1, -1
aRRRRwddrqrrqqq -1, -4
rrrrrrrrrrrrRRRRRRrrrrrrq -1, -1
rrRrRrrRrrrrRRrRrRR 0, 0