感想

色々あるんだけど、総合して2時間かかった。
30分で入力処理。
30分でアルゴリズムの実装。
んで1時間バグに悩むという流れ。
私も入れないっぽい><。

入力のとまどい

んーと、まぁ、えっと盤面の大きさに見合った配列の宣言で悩む。
しょうがないので、変なクラスひっぱってきて、配列にあとで変換。
ちょっといやらしいコードになってるです。

アルゴリズム

まぁ、頭に最初に浮かんだのが、ああバックトラックねというものだったので、そのまま実装。いわゆる縦型探索のコードになってます。
学生のころは、こういうのをLispProlog使って書いてたので、まぁ普通に思いつきはしました。
で、実装してトレースしてみると、うへ無駄な動き大杉w。ってことで、あーあーイマイチ選定あやまったなーと。そうはいってもめんどくさいのでそのまま動かしましたw。
A*知ってるか知ってないかじゃん?とかいう人は、ちょっと見識足りないかな。
横型探索にしろ縦型探索にしろ、それは多分常識のひとつ。
んで、募集しているひとは、こういう問題解決型の人材を欲しがっているってことでしょう。それについてあーだこーだいうのは、なんか間違いかな。所詮プログラムなんてのは、何かの問題を解決するのが基本ですよ。どういう問題かは、フィールドがそれぞれあるけどね。SEとかいうのは、ようするに政治問題をシステム問題に変換かけるプロなわけで、ただ、そういう人が必要な仕事ではないんでしょう。
んで、アルゴリズムを知っているか知ってないかってのはあるけど、知らなくても、解くだけなら解けるよね。最善じゃなくても。そういう頭はどうしたってプログラマなら必須ですよ。そうじゃないなら、どういう仕事をしているかは謎です。

1時間悩んだバグとは?

ということで、まぁイメージどおりにバックトラックのコード書いていったのです。がなんか動かずw。どこにひっかかっていたかというと、答えは、answer= hisotry;こういうの書いてたんですね。アレイを全部コピーしてもつつもり(頭の中では)書いちゃってたんだけど、現実には、ずっとhistoryを保持しっぱなさいという。ということで、cloneつけたら思った動作になりました。

アルゴリズムの仕様

  • 縦型探索、バックトラック法
  • 最長深度を保持して、それより深い経路はカット
  • 回答は順次印刷(そういう意味では、answerもhisotyもいらない変数になってますw)
  • history(ArrayList)でStackを実現。
    • 欠点、動きに無駄が多い
    • 実装は簡便
    • 再帰こそ愛、Lisp再びな気分で書きました。