7年ぶり再会

ひゃっほーう!!

高専4年の秋、プロコンで山形に行って、あのプロコンの帰りの寝台列車にて話した明石高専の仲間(明石は準優勝だった)が、なんと俺のこと覚えててくれて、mixiメッセージいただくという奇蹟が一昨日あたりに起こった!こんなうれしいことはない!

今はプログラマーになって高専生その後らしいライフを歩んでいるようだ。

                                                              • -

記憶の中では、お互いのソフトのインタフェースについて褒めあったり、GAをどう使ったかとかで盛り上がった気がする。競技の内容は、5*5*5(6*6*6もある)の立方体が15ピースくらいにバラバラになった状態のものが出てきて、これを完全な形に復元するというもの。フロッピーかなにかで明石のソースの一部をもらったのだが、実はどこかへ紛失してしまった。当時の自分のソースも既にない。

自分のアルゴリズムを思い返すに、まずそれぞれのピースをfitという適応度の観点で計測する。たとえば形が小さくて、線対称、面対象のものはfitが高いという具合だ。その後で、ブランクの立方体にそれぞれをはめ込んで行く順番をfitの低いものから決定する。すべてをはめ込むか、これ以上はめ込むのは無理になったら、隙間を算出する。次に順番の後ろのあたりを少し変えて、再びはめ込むのを再開する。また隙間を算出する。前回のより隙間が小さければ、手順(ピースID、方向、配置場所)を記録する。たまにfitの低いほうの手順を変える。この処理を延々繰り返し、40秒後にもっとも隙間が小さかった手順を表示する。

ピース毎のfitではなく、全体の順番としてのfitを算出しなければ、意味がなかったな。だけどそこにおとしこむことがどうしても考えつかなかった。ランダムで当てはめていくやり方と比較して効果があったのかどうか、わからない。性能の評価なんてまったくやってなかった。

やり方としてはそんなに間違っていなかったはずだが、40秒というのが致命的すぎた。
また、立方体を表す配列が静的で一回一回、詰まっているかの条件文を入れていたため効率の悪いデータ構造だった。

組んで、動いて、の試行錯誤の繰り返し。今だにどうすればよかったのか、考えることがある。