バックグラウンド
あなたは目覚めて、一次元の迷宮で迷子になっていることに気づきます!神秘的な魔神(または何か)が現れ、出口があなたの前にあることを説明しますが、あなたと出口の間には一連の課題があります。歩き回ると、いわゆるチャレンジはすべて施錠されたドアに過ぎないことに気付くでしょう。最初に、T字型の鍵穴のあるドアを見て、自分でそのような鍵を持っていない場合、ステップをたどって、T
形のある鍵を探します。
イライラして、あなたは地面に鍵のアルファベットのスープを見つけます、どれもあなたが出くわしたドアにマッチしません。天才(または馬鹿げた)のストロークで、小文字のt
形をしたキーが十分に強くジャムするとスロットに収まる可能性があると判断します。小文字のt
キーを手に持ってドアに近づくと、T
穴が緑色に光り、ドアが目の前で消えます。
あと1つ、もっとたくさん...
チャレンジ
この課題の目標は、迷路から抜け出すまでに必要なステップ数をマークすることです。
このチャレンジの入力は迷路です:文字のみを含む1つの文字列[A-Za-z^$ ]
です。用語集:
^
-開始スペース。入力には正確に1つが含まれます^
。$
-出口(自由!)。入力には正確に1つが含まれます$
。[A-Z]
-大文字はドアを意味します。必要なキーをすでに収集している場合にのみ、このドアを通過できます。[a-z]
-小文字はキーを示します。これらのキーを収集するには、キーを含むスペースに歩いて行きます。
入力に含まれる大文字は最大で1つです。これは、ドアの合計数が0〜26の間であることを意味します。
すべてのロックされたドアに[A-Z]
は、対応する小文字のキーが1つだけあります[a-z]
。入力には任意の数のスペース()を含めることができます。
すべてのドアは、スタートの右側と出口の左側にあります。したがって、余分なドアはありません。すべての入力は解決可能です。
このチャレンジの出力は、ラビリンスを抜けるまでにかかったステップの数です。
アルゴリズム
この惨めな場所を出るための系統的なアプローチは次のとおりです。
- 最初から始め(
^
)、前方(右)に移動して、出会ったキーを収集します。 - ドアに出くわしたとき、正しいキーがあれば、ドアに向かって進みます。正しいキーを持っていない場合は、後方(左)に歩いて、開いていない最新のドアのキーが見つかるまで、出会ったキーを収集します。
- 現在の面倒なドアの鍵を集めたら、右に戻り、先に進みます。
- 出口(
$
)に進むまで、このプロセスを繰り返します。
経験豊富なゴルファーは、このアルゴリズムを実行した場合と同じ結果を出力する限り、コードがこの特定のアルゴリズムを実装する必要がないことを理解します。
カウント
1つの正方形から別の正方形にステップするたびに、それが1つのステップとしてカウントされます。180º回転しても追加のステップは発生しません。必要なキーがないと、ドアに足を踏み入れることはできません。あなたはそれを拾うためにキーに足を踏み入れなければならず、勝つために出口に足を踏み入れなければなりません。最初の移動の後、開始スペース(^
)は他の通常のスペースと同じように動作します。
例
これらの例では、人間が読みやすいようにスペースをアンダースコアとして残しています。
入力は_a_^_A__$__
です。出力は11
です。あなたは1
一歩前進し、A
ドアの鍵がないことに気付き、それから顔について。を含むスペースを占めるまで後方に歩きますa
(3
後方に進み、現在は4
合計)。次に、出口を含むスペースを占有するまで前方に歩きます(前方に進み7
、11
合計)。
入力はb__j^__a_AJB_$
です。出力は41
、1つはj
キーを取得し、次のキーはキーを取得するために、ラビリンスの裏側に2回旅行しb
ます。
入力は__m__t_^__x_T_MX_$____
です。出力は44
です。x
鍵を手に入れるために余分な旅行をすることはありませんT
。最初からドアまでの途中で鍵を手にしたからです。
入力はg_t_^G_T$
です。出力は12
です。あなたはG
キーなしで、すぐに顔を合わせてスペースに移動することはできません。あなたは幸運にも、t
鍵に向かう途中で鍵を手に取り、g
自由に向かう途中で両方の扉を開くことができます。
入力は_^_____$
です。出力は6
です。それは簡単でした。
I / Oガイドラインと勝利基準
標準のI / Oルールが適用されます。これはコードゴルフの挑戦です。
A
でbA^aB$
はないと思います。;)