前書き
誰もが小惑星フィールドをうまくナビゲートする可能性は約3,720対1であることを知っています。しかし、あなたの警告にもかかわらず、ハン・ソロはまだ彼の運を試してみようとしています。
人工生命を恐れて、船の固有の方言(お好みのCode Golf言語)で、小惑星野ASCII迷路をどの経路で進むかを決定する小惑星回避プログラムをコーディングすることにします。
入力
ミレニアムファルコンには、これに似たデータを提供する小惑星フィールドマッピングプログラムがあります。
| ##### ######### |
| ###### # ### # |
| # # # # #### # |
@ ## ####
|# # # ### ## |
|## ## #### # # |
|#### ##### # ## |
一番上の行はファルコンの左、一番下の行はファルコンの右、そして列は船の前にあるものを表します。
- それぞれ
#
が障害です。 - 各スペースは、船が飛行できる空のスペースです。
- 入力の高さは常に7文字です。これは、小惑星のマッピング幅の制限です。
- 入力は常に32文字です(フィールド自体は30文字、開始と終了の制限は2文字)。これは、小惑星のマッピング深度の制限です。垂直バー
|
は、マッピングの開始と終了を示します。 @
ファルコンです。入力の中央の行(4行目)と最初の列に常にあります。- 最後の列の垂直バーに残されたスペースは、船が到着しなければならない場所です。入力の中央の行(4行目)と最後の列に常にあります。
入力は、複数行の文字列、文字列の配列、STDINまたは関数パラメータから取得するか、ファイルから読み取ることができます。
可能な操作
あなたはTIEファイターに追われているため、常に前進しなければなりません。したがって、船が各ステップで飛行できる方法は3つあります。
-
進む/
前進して左に曲がる\
前進して右折
たとえば、これらは有効なパスです。
@---
--
/ \ /
@ -
-
/ \
/ \
@ \
ご覧のとおり、列ごとに常に1つの動きがあります。ファルコンはジャンクの一部であるため、暴力的なターンを行うことはできません。/\
またはのような移動\/
は許可されません。-
向かい合う2つのターンの間には、少なくとも1つの純粋な前進がなければなりません。一方、上記のように、複数のステップを一方向に回すことも可能です。
ファルコンは、1回の動きで船が障害物のある場所にくるとクラッシュします。たとえば、これらの動きはクラッシュにつながります。
@-#
@
\
#
#
/
@
これはクラッシュではないことに注意してください。
@-#
\
-
出力
最後の有効なパスを使用して、同じ小惑星フィールドASCIIを出力する必要があります。ファルコンは、開始点ではなく終了点に印刷する必要があります。
たとえば、前述の入力例の有効な出力は次のとおりです。
| ##### ######### |
| ###### #-------- ### # |
| # # #/ # ####\ # |
--------- ## \ #### ----@
|# # # ### \ ## / |
|## ## #### \ #/ # |
|#### ##### #-- ## |
あなたの道はハヤブサをクラッシュさせないことだけが必要です。最短のパスである必要はありません。
常に、少なくとも1つの可能な最後までのパスがあると想定できます。
小惑星フィールドがこの投稿とまったく同じように印刷される限り、ファイルまたは同等のものでSTDOUTに出力できます(たとえば、パスの座標リストの出力は無効です)。
テストケース
通常の小惑星フィールド
| ##### ######### | | ###### # ### # | | # # # # #### # | @ ## #### |# # # ### ## | |## ## #### # # | |#### ##### # ## |
可能な出力
| ##### ######### | | ###### #-------- ### # | | # # #/ # ####\ # | --------- ## \ #### ----@ |# # # ### \ ## / | |## ## #### \ #/ # | |#### ##### #-- ## |
超規則的な小惑星フィールド
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | @ # # # # # # # # # # # # # # |# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # |
可能な出力
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | -# #-# #-# #-# #-# #-# #-# #--@ |#\#/#\#/#\#/#\#/#\#/#\#/#\#/# | | #-# #-# #-# #-# #-# #-# #-# #| |# # # # # # # # # # # # # # # |
デススターの核
| # # # # | | # # # | | # # # # # | @ # # # # # | # # # # | | # # # # # | | # # # # |
可能な出力
| # # # -- # | | --- # # / #\ - | | / #\ # # / # \ /#\ | - # \ # #/ # - # ----@ | # \ # ---- # # | | # \#/ # # # | | # - # # # |
デススタートレンチ
|##############################| |##############################| |##############################| @ |##############################| |##############################| |##############################|
出力
|##############################| |##############################| |##############################| ------------------------------@ |##############################| |##############################| |##############################|
小惑星の洞窟
|### ##########################| |## # ############### ## ######| |# ### ######## ### ## # #####| @ ###### ###### ### ## ### |######## ### ### ## #########| |########## # ### ## ##########| |########### #####|
可能な出力
|###-##########################| |##/#\############### ##-######| |#/###--######## ### ##/#\#####| -######\###### ### ##/###-----@ |########--### ### ##/#########| |##########\# ### ##/##########| |###########-------- #####|
得点
R2D2は沼地で泳いでいるので忙しいので、ファルコンのコントローラーを自分でプログラムする必要がありますが、これは退屈です。したがって、最短のコードが優先されます。
-
各ターンのパスにあり、これは「前進」の動きとして定義されています。しかし、実際の動きは常に2つの斜め左とそれに続く2つの斜め右です。