The 10th ICFP Programming Contest

毎年やってる、アレな人たちによるプログラミングコンテスト
昨日開催に気付いて、多分途中で諦めるやろうけど参加しようかなー、とか思いつつ電脳コイルの2巻を買って読んだりして、結局問題を読んだのが今日の昼頃。その後もきむちが来たりして妨害されまくり。いやー、多分時間内に結果出すんは無理やな…。

とりあえずストーリーとしては宇宙人の遠藤(Endo)さんが地球に墜落して、死にかけている。そのままだと地球で生きられないのでDNA(RNA)を書換えて体を変態させることで、生き延びさせてやろう、とかいうやつ。画像では遠藤さん、λとか言ってて平気そうやけど。
で、与えられてるのがDNA文字列(I,C,F,Pの4字から成る)と、ソース画像とターゲット画像。あとタスクの詳細説明PDF。

やることはこのPDFの中にこと細かに書いてあるんで、さしあたり実装問題なんやが、実装するだけでは終わらない。タスクはDNAからRNAを(アルゴリズムに従って)抽出して、そのRNAを使って画像を生成する…という手順を踏まえて、DNAの先頭(prefix)を補って正しい画像(ターゲット画像)が生成できるようにするのがタスク。送信するのはそのprefixのみ。生成画像が正しいものに近い程ポイントが高い。
まぁ、prefixというかDNAに対する変換なんやが。DNA->RNAアルゴリズムというのが、大雑把にはDNAを最初から読んで行って、ある区切りまで読みこんだ部分を解読するとDNAに対する変換になるんで、それを次の読み込み部分に適用して*1、得られた結果をDNA先頭に戻して(読み込んだ部分は消えている)、また頭から読み直し(最初に戻る)…という自己書換えDNAともいうべきものやから、なんかそのへんを踏まえて考えるとうまく行くんやろうか。

で、さしあたり適当にSchemeでDNA->RNAアルゴリズムを実装してみたが、最初はメモリリークしまくりで落ちてしまった。set-cdr!とかを使って対処したらなんとか動いたが、そのまんま過ぎたのか全然解読が終わらん。こりゃあかんな…。

とか言ってたら終った。2時間くらいかかった気がするな…。合ってんのかこれ?どっちにしろprefixがわからん。とりあえず明日、画像生成のほうを実装するか…<やる気なし

*1:ここで、たまにRNAが生成される。