この課題の目標は、特定のコースを完了するために必要な最小限のストライクを返すプログラムまたは関数を作成することです。
入力
- コースのレイアウトは、適切な方法で渡すことができ、お好みの形式にできます。(コンソールから読み取られ、入力パラメーターとして渡され、ファイルまたはその他の複数行ストリング、ストリング配列、2次元文字/バイト配列から読み取られます)。
- ボールとホールの開始位置も入力として渡すことができます。入力から解析する必要はありません。テストケースでは、実際の位置について混乱がないことを確認するために、コースに含まれています。
- 入力文字を別の文字(印刷可能なASCII文字など)として認識できる限り、他の文字に再マッピングできます。
出力
- プログラムは、賢明な形式(結果を説明する文字列、整数、浮動小数点数または俳句)で入力として渡されたコースについて、可能な限り低いスコア(ホールに到達するために必要なストライキの最小量)を返す必要があります
- コースを打つことが不可能な場合は、リターンします
-1
(または、ビート可能なコースでは返されない、選択した他の偽の値)。
例:
この例では、位置は0ベース、X / Y、左から右、トップダウンで表記されていますが、結果は完全にフォーマットに依存しないため、任意のフォーマットを使用できます。
入力:
###########
# ....#
# ...#
# ~ . #
# ~~~ . #
# ~~~~ #
# ~~~~ #
# ~~~~ o #
# ~~~~ #
#@~~~~ #
###########
Ball (Start-Position): 1/9
Hole (End-Position): 8/7
出力:
8
ルールとフィールド
コースは次のフィールドで構成できます。
'@'
ボール -コースの開始'o'
穴 -コースの目標'#'
壁 -ボールが壁に当たると停止します'~'
水 -避ける必要があります'.'
砂 -ボールはすぐに砂の上で止まります' '
アイス -ボールは何かに当たるまでスライドし続けます
ゲームの基本的なルールと制限:
- ボールは斜めに動くことができず、左、右、上下のみです。
- ボールは水の前で止まらず、壁の前、砂の上、穴の中だけで止まります。
- 水へのショットは無効/不可能です
- ボールは穴にとどまり、氷の上で飛ぶように飛び越えない
- コースは常に長方形です。
- コースは常に水または壁に囲まれています(境界チェックは不要です)。
- 常に正確に1つのボールと1つの穴があります。
- すべてのコースが勝つわけではありません。
- 同じ(最低の)スコアになる複数のパスが存在する場合があります。
抜け穴と勝利条件
- 標準的な抜け穴は禁止されています
- プログラムは終了する必要があります
- 追加のルールを作成することはできません(ボールを強く叩くと、水を飛び越えたり、壁から跳ね返ったり、砂地を飛び越えたり、角を曲がったりします)。
- これはcode-golfであるため、文字数が最も少ないソリューションが優先されます。
- ソリューションは、提供されたすべてのテストケースを処理できる必要があります。使用言語の制限によりこれが不可能な場合は、回答でそれを指定してください。
テストケース
コース#1(2回のストライキ)
####
# @#
#o~#
####
コース#2(不可能)
#####
#@ #
# o #
# #
#####
コース#3(3回のストライキ)
~~~
~@~
~.~
~ ~
~ ~
~ ~
~ ~
~.~
~o~
~~~
コース#4(2回のストライキ)
#########
#~~~~~~~#
#~~~@~~~#
## . ##
#~ ~ ~ ~#
#~. o .~#
#~~~ ~~~#
#~~~~~~~#
#########
コース#5(不可能)
~~~~~~~
~... ~
~.@.~.~
~... ~
~ ~ ~.~
~ . .o~
~~~~~~~
その他のテストケース:
1
関連:One、Two。
—
AdmBorkBork
入力として2次元のバイト配列を使用する場合、シンボルにカスタムマッピングを使用できますか?
—
アーナルド
@Arnauldそれに関する通常のコンセンサスがここにあるかどうかはわかりませんが、入力がまだ認識可能である限り、大丈夫だと思います。入力セクションを更新しました。
—
マンフレッドラドルウィマー
宛先を直接入力する場合、宛先の場所を「砂」記号にする必要がありますか?
—
l4m2
@ l4m2確かに、そうすれば、他のすべてのルールと一貫性が保たれます。
—
マンフレッドラドルウィマー