ずっと昔にあったプログラミングコンテストでやりたかったけどやってなかったものがあったので、この休み期間中にトライしてみている。2007年のICFPC (International Conference on Functional Programming Contest)で、内容はDNAを操作してできるだけ目的の絵に近くなるようにするというもの。

ドキュメントの最後に書いてある、DNAプレフィクス(IIPIFFCPICICIICPIICIPPPICIIC)を試してみたところ、セルフチェックがある程度ちゃんと動いてるようだ:
selfcheck

ただ、左上になんか変な文字が残ってるのと、11のALPHA COMPOSITIONのところにアルファ合成するテストの四角形が表示されるらしいが出てない、なのにOKとなっているのと、24のFAILED SEARCH以降がOKじゃなく、まだまだちゃんと動いてないっぽい。

いろいろハマりどころ:

  • consts() で、C, F, P, IC にマッチしない場合には何も消費せずに空を返す
  • pattern() で、IF のときは、2文字じゃなくて3文字消費する
  • replace()Environment を参照するときに、インデクスが範囲外だった場合は空を返す
  • つまりドキュメントをよく読め
  • ドキュメントによると、execute() の実行は1,891,886回繰り返され、302,450個のRNAを出力するらしい。線形の文字列操作はヤバい。ropeを使うといいとの話なんだけど、組込み方がわかってない。

リンク: