おかげで、叔父(物語)
私の少し気違いの叔父は最近スペースコロニーに向けて出発し、彼のパレット商品事業を私に渡しました。長方形の倉庫には、ドアの横にある1つの正方形を除いて、商品のパレットがたくさんあります。今日、顧客から注文されたパレットの最初のリストが届きました。
幸いにも、各パレットの場所を注意深く書いた地図があり、私の狂った叔父は、スライドする15パズルのように、パレットを隣接するスペースに移動できるいくつかのミニロボットを設計しました。パレットがどこに行き着くかは気にしませんが、リストにあるパレットがドアの順に到着するようにしたいだけです。
問題は、必要なパレットを取得するために、ロボットにどのような一連のコマンドを与えなければならないかです。
チャレンジ
与えられた
- グリッドのサイズ(行、列)
- 順番に取得するパレットのリスト(現在の場所別)
移動する位置と方向に対応するグリッド位置のリストを出力する必要があります。利用できる方向が1つしかない場合は、オプションで省略できます。パレットはドアのそばに到着するとすぐに削除されます(1つのコーナー、例ではインデックスN)。
働いた例
01 02 label the contents A B
03 04 C D
05[ ] E _
Request: 03 (contents is C)
Command 0: 04
D moves into the (only) adjacent space at index 06
Result: A B
C _
E D
Command 1: 03
C moves into the (only) adjacent space at index 04
Result: A B
_ C
E D
Command 2: 05
A B
E C
_ D
Command 3: 06
A B
E C
D _
Command 4: 04
A B
E _
D[C]
(C removed having arrived by the door)
制限と自由
- 最大グリッドサイズは100x100です
- 挑戦はコードゴルフ
- ソリューションは、実際のマシンで2分以内に実行する必要があります
- 一貫性がある限り、インデックス、コマンド構文、入力構造などを選択できます。
- コマンドにはグリッドの場所を使用することを選択しましたが、要素が一意であるため、代わりに要素に値を加えることができます(方向もプラス)。
- 状態のアニメーション(特に大きなグリッドの場合)を作成したい場合は、きっと面白いでしょう。
例
A:3x2、1パレット
01 02
03 04
05 [__]
Request: pallet at 03
Valid solution: 05,03,04,06,05
This leaves the following state:
01 02
04 05
__ [03]
B:15パズル、1箱
01 02 03 04 05
06 07 08 09 10
11 12 13 14[ ]
Request: box 01
Valid solution: 14,13,12,11,06,01,02,07,12,11,06,07,12,11,06,07,08,13,12,11,06,07,08,09,14,13,08,09,10,15,14
02 07 03 04 05
08 12 13 10 14
06 11 09 __[01]
C:3x2、4ボックス
01 02
03 04
05[ ]
Request: 02,04,01,05
Valid solution: 04,02,01,03,05,06,04,05,02,06,03S,05E
Pallet taken at: ^ ^ ^ ^
Indicating directions with NSEW
Final state:
03 __
__ __
__ __
D:10x10、2ボックス
10x10, request boxes at 13,12 (row 1, cols 2 & 1 with 0-index)
Valid solution: (90,80..20, 19,18..12, 22,32..92, 93,94..100) x 15, 90.
E:4x1、すべて
4x1: 01 02 03 [ ]
Req: 03,02,01 (only valid order)
Optimal solution: 03,02,03E,01,02E,03E
F:100x100、ドアの近くに3つ
100x100
Req: 9900,9899,9898
Result: 9000,9989,9000S,9898,9898E,9000S
ボックス2と3が要求された場合、ドアに向かって2を移動しているときに3がドアを通過することは違法ですか?
—
ジョナ
@ジョナ:いいえ、または最初のボックスがn-1またはncでない限り、シナリオは解決できません。ドアのそばの特別な唯一のことは、リストの次のパレットがそこに到着したとき、それは私の風変わりなフォークリフトのオペレーターによってすぐに取り除かれるということです。
—
Phil H