TL; DR:文字の配列と配列の開始位置にあるロボットを指定して、動きのある文字列を読み取ることができるアルゴリズムを書きます(
F
「進む」、R
「右に90度回転する」、「90度L
回転する」左」)、ロボットの終了位置を計算します。全文の詳細。
自宅には子供向けの非常にシンプルなプログラム可能なデバイスがあります。ボタンで車両を前進させたり、左に90度回転させたり、右に90度回転させたりするためのボタンがあります。これに似たもの:
また、次のような文字のフォームマットもあります。
このすべての目的は、子供たちにアルファベットとプログラミングの基礎の両方を一度に教えることです。
チャレンジ
フォームマットを次のようにランダムに配置したとします。
+---+---+---+---+---+---+---+
| E | R | L | B | I | X | N |
+---+---+---+---+---+---+---+
| O | A | Q | Y | C | T | G |
+---+---+---+---+---+---+---+
| F | W | H | P | D | Z | S |
+---+---+---+---+---+---+---+
| K | V | U | M | J |
+---+---+---+---+---+
| |
+---+
また、「前進」コマンドをプログラムするときに車両がマットの1正方形のサイズだけ正確に前進するように車両を変更したとします。そのため、車両がU
広場にあり北に行く場合、車両は広場で正確に停止しP
ます。
指示はすべて、移動を開始する前に車両に与えられ、次のとおりです。
F
:車両は次の広場に進みます。R
:車両はその場所で90度右に曲がります(それ以上は動きません)。L
:車両はその場所で左に90度回転します(それ以上の移動はありません)。
指示が与えられたら、「GO」ボタンを押して、指定された順序ですべての指示に従うため、車両を指定された位置に送信できます。だから、あなたは子供が与えられた手紙に行くために車両に必要な指示を挿入するように伝えることができます。
string
(入力パラメーター)を一連の指示で処理し、車両が停止する文字(出力string
)を計算する最短のプログラム/関数を作成する必要があります。
詳細:
- 車両は常に、一番下の空白の正方形から始まり、北を向いています(
U
正方形に向かって)。 - 入力文字列は、文字のみが含まれます
F
、R
、L
とG
(「GO」ボタンのため)。必要に応じて、マットと手順に小文字を使用できます。 - アルゴリズムは、文字列内の最初の
G
命令の前にすべての命令に従う必要があります(車両が移動を開始したため、その後の命令はすべて無視されます)。 - 車両が特定の瞬間にマットから出た場合(入力文字列が完全に処理されていない場合でも)、アルゴリズムはstringを返す必要があります
Out of mat
。 - そうでない場合、アルゴリズムは車両が停止した手紙を返さなければなりません。開始点は、
char(または空の文字列)としてカウントされます。
例:
Input: FFG
Output: P
Input: FRFRFG
Output: Out of mat
Input: RRFFG
Output: Out of mat
Input: FFFRFFLFG
Output: X
Input: FFFRFFLF
Output: <-- Nothing or a whitespace (the robot has not started moving)
Input: FFFRRFFFG
Output: <-- Nothing or a whitespace (the robot has returned to the starting point)
Input: RRRRRLFFFLFFRFRFGFFRRGRFF
Output: L (Everything after the first G is ignored)
これはcode-golfなので、各言語の最短プログラムが勝つかもしれません!
@
マットオフである開始位置とスペースであり、この設定は次のようになりますので、ERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(異なる間隔で、SEはそれを台無し)