六角形のグリッド上の動きを表す一連の文字の入力が与えられた場合、「ポインター」の最終座標を出力します。
六角形には次のように番号が付けられます(すべての奇数列が少し下にシフトした長方形のグリッドを想像してください):
_____ _____ _____ _____
/ \ / \ / \ / \
/ -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
)で結合された単一の文字列、または整数の配列のいずれかです。
これがあるので、コードゴルフ、バイト単位での最短コードが勝ちます。
テストケース:
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