给定一系列代表六边形网格上运动的字符的输入,输出“指针”的最终坐标。
我们的六边形将按以下方式编号(想象一个矩形网格,每个奇数编号的列都会稍微向下移动):
_____ _____ _____ _____
/ \ / \ / \ / \
/ -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
)之后,命令将重新映射为(将其想象为旋转整个十六进制网格,但仍将“ 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