一連の航空機マーシャリング手信号を表す文字列が与えられた場合、これらの信号に続く航空機の最終位置を計算する関数またはプログラムを記述します。
NB:この挑戦で座標がデカルト座標の対、プラスコンパス方向見出しとして表される:x座標され、y座標であり、のいずれかである、、、または。(x, y, h)
x
y
h
N
E
S
W
(0, 0, N)
エンジンをオフにして、架空のグリッド上にある航空機から始めます。入力は、コンマ区切りの文字のペアを含む文字列で、各ペアは1つのマーシャリング信号を表します。順番に各マーシャリング信号を追跡し(x, y, h)
、航空機の最終位置の形式で座標を出力する必要があります。
信号が航空機の移動を必要とする場合、航空機が受信するそのタイプの信号ごとに必要な方向に1ユニット移動すると想定します。信号が航空機に方向転換を要求する場合、受信するそのタイプの信号ごとに必要な方向に90度回転すると仮定します。
エンジンがオフの場合、航空機は移動できません。航空機のエンジンがオフで動き/方向指示器を受け取った場合は、動き/方向転換を行わないでください。
信号
各マーシャリング信号は、1組の文字で表されます。ペアの1つ目は、航空機の視点からのマーシャラーの左腕の位置を表し、2つ目は同じPOVからの右腕の位置を表します。この便利なシグナルのチャートが役立つかもしれません。
o/ — START ENGINES (no movement, no turn)
-/ — CUT ENGINES (no movement, no turn)
-~ — TURN LEFT (no movement, left turn)
~- — TURN RIGHT (no movement, right turn)
~~ — COME FORWARD (forward movement, no turn)
:: — MOVE BACK (backward movement, no turn)
/\ — NORMAL STOP (no movement, no turn)
これはマーシャリング信号の完全なリストではありませんが、サポートする必要があるのはそれだけです。
入力
入力は、文字のペアを含むコンマ区切りの文字列です。この文字列は常に有効です-入力を検証する必要はありません。
出力
上記のように、出力は座標のセットです。これは任意の便利な形式で返すことができます-言語が複数の戻り値をサポートしている場合は、それを使用できます。または、文字列(座標を囲む角括弧は必須ではありません)、配列、タプル、リスト、またはその他の便利なものを使用できます。唯一のルールは、それが含まれていなければならないということであるx
、y
とh
その順序で、値。
テストケース
Input — Output
o/,~~,~~,~-,:: — (-1, 2, E)
::,~-,o/,/\,~~,-~,~~,~~,~~ — (-3, 1, W)
o/,::,-/,~~,o/,~-,~~,~~,~- — (2, -1, S)
o/,~-,~-,::,::,~-,~~,-~ — (-1, 2, S)
~-,~-,o/,::,::,-/,~~,-~ — (0, -2, N)