悲惨なカヌーに乗った後、川の急流の終わりに滝から落ちてしまいました。あなたのカヌーは爆発しましたが、あなたはなんとか爆発を生き延びました。しかし、あなたの川の旅は完全に地図から外れました-あなたは今、森の真ん中で迷いました。幸い、あなたはまだプログラミングスキルを持っているので、プログラムをツリーの側面に切り分けて、森を抜ける方法を見つけることにしました。ただし、ツリーには表面積があまりないため、プログラムをできるだけ短くする必要があります。
フォレストは、n
by n
(n > 5
)の正方形の文字で表すことができ、小文字のみで構成されますa-z
。フォレストの例:
anehcienwlndm
baneiryeivown
bnabncmxlriru
anhahirrnrauc
riwuafuvocvnc
riwnbaueibnxz
hyirorairener
ruwiiwuauawoe
qnnvcizdaiehr
iefyioeorauvi
quoeuroenraib
cuivoaisdfuae
efoiebnxmcsua
このフォレストでは、a
左上隅から右下隅に向かって斜めに文字のラインが走っていることにお気づきかもしれません。これは、森を通る「道」であり、それをたどるとどこかにあなたを導きます。あなたの仕事は、特異な経路を見つけるプログラムを書くことです。ここで、この課題で「パス」を意味するものをより具体的に説明します。
この課題での「パス」は、ブレゼンハムアルゴリズムで生成された可能性があるものに類似したラインとして定義されますが、次の追加要件があります。
- 行の長さは6文字以上にする必要があります
- 行内の同一直線上にある(完全に隣接する)文字のグループはすべて同じ長さでなければなりません。
- フォレストの一方の端で始まり、反対の端で終わります(詳しくは、私のコメントを参照してください)
2番目の要件をより明確に説明するには、次の行を検討してください。
aaa
aaa
aaa
aaa
aaa
この行は、同一線上にある文字の「セグメント」で構成されており、各セグメントは正確に3文字です。パスとみなされます。今、この行を考えてみましょう:
a
aa
a
aa
a
aa
この行は、すべて同じ長さの文字ではない同一線上の「セグメント」で構成されています(一部は1文字で、一部は2文字です)。したがって、これはパスとしての資格はありません。
フォレストのマップが与えられたプログラムは、パスで使用されている文字を識別します。入力は、都合のよいもの(たとえば、コマンドライン引数、STDIN prompt()
など)を使用します。変数に事前初期化することはできません。入力の最初の部分は、n
フォレストのサイズを表す単一の整数です(フォレストは常に正方形です)。その後はスペースで、次にフォレスト全体が単一の文字列になります。たとえば、サンプルのフォレストは、次のように入力として提示されます。
13 anehcienwlndmbaneiryeivownbnabncmxlriruanhahirrnraucriwuafuvocvncriwnbaueibnxzhyirorairenerruwiiwuauawoeqnnvcizdaiehriefyioeorauviquoeuroenraibcuivoaisdfuaeefoiebnxmcsua
この出力は次のようになります。
a
パスは文字を使用して形成されているためa
です。フォレスト内のパスは1つだけです。これはコードゴルフなので、最低数のキャラクターが勝ちます。質問がある場合は、コメント欄で質問してください。