<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/ranha-icfp/">
    <title>ranha-icfp @ ウィキ</title>
    <link>http://w.atwiki.jp/ranha-icfp/</link>
    <atom:link href="https://w.atwiki.jp/ranha-icfp/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>ranha-icfp @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2008-05-18T17:07:19+09:00</dc:date>
    <utime>1211098039</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/ranha-icfp/pages/21.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ranha-icfp/pages/20.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ranha-icfp/pages/19.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ranha-icfp/pages/18.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ranha-icfp/pages/17.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ranha-icfp/pages/16.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ranha-icfp/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ranha-icfp/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ranha-icfp/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ranha-icfp/pages/12.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/ranha-icfp/pages/21.html">
    <title>画像置き場</title>
    <link>https://w.atwiki.jp/ranha-icfp/pages/21.html</link>
    <description>
      生成物(画像)を置きましょう    </description>
    <dc:date>2008-05-18T17:07:19+09:00</dc:date>
    <utime>1211098039</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ranha-icfp/pages/20.html">
    <title>データ構造を考える</title>
    <link>https://w.atwiki.jp/ranha-icfp/pages/20.html</link>
    <description>
      endo.dnaの文字数は7523060字。

これだけの文字数を、例えばC++ならナイーブにstd::stringに持たせると
多分酷い事に成る。

なんせ行われる操作の殆どが文字の切り出し(部分文字列の取得)と連結だらけですもの。


取りあえずstd::stringは主な操作にどれくらいのオーダーがかかるのか、というのを
sgi stlのドキュメントを読んで考えてみる。

http://www.sgi.com/tech/stl/basic_string.html

Note that the C++ standard does not specify the complexity of basic_string operations.
In this implementation, basic_string has performance characteristics very similar to those of vector: access to a single character is O(1), while copy and concatenation are O(N).

ランダムアクセスはO(1)の定数時間で出来るらしいが、コピーと結合はO(N)掛かるとの事。
しかもこれ係数が分からん。
内部的にはvectorに似てるんですって。
substrとか何をしでかしてるのか分かりませんね。

で、ちょっと調べてみるとsubstrは内部的にコピーを行っているようなので、piece of adviceの最後に書かれていた
線形時間オーダーO(n)より良い計算量では無い。


だいたい内部構造がvectorとかいう時点で750万文字も持たせたくは無い。
さて、どうするか?    </description>
    <dc:date>2008-05-16T17:51:07+09:00</dc:date>
    <utime>1210927867</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ranha-icfp/pages/19.html">
    <title>pseudo code解説</title>
    <link>https://w.atwiki.jp/ranha-icfp/pages/19.html</link>
    <description>
      ちなみに、このPDFで書かれてる疑似コードはBNF(っぽい)
*疑似コード解説
**Fig2 DNAデータ型
 BASE ::= I | C | F | P
 DNA  ::= Base* (Baseの繰り返し)
 RNA  ::= DNA*  (DNAの繰り返し、DNAと同じ)

 DNA = array&lt;BASE&gt;
 RNA = array&lt;DNA&gt;
という事
**Fig3 シーケンス型
 X* X型の要素から成り立つシーケンス
 ε  空っぽのシーケンス
 x &lt;| xs 要素x + シーケンスxsで結合する
 xs |&gt; x シーケンスxs + 要素xで結合する
 xs &lt;&gt; ys シーケンスxs + シーケンスys
 xs[m..n] xsの部分シーケンスで index m 〜 index (n-1)
 xs[m..] xsの部分シーケンスで　index mから最後まで(index len-1)
 xs[n] xsのindex n(xs[n..(n+1)]とも書ける)。不正なindexの場合はε
 len xs シーケンスxsの長さ
**Fig5 DNAの実行
 global dna : DNA &lt;- ε(グローバル変数dnaを空に初期化)
 global rna : RNA &lt;- ε(グローバル変数rnaを空に初期化)
 proc execute () =
  dna &lt;- read(入力を読み込む　遠藤DNAの事か)
  repeat
    let p &lt;- pattern () (patternを呼び出し返値を得る)
    let t &lt;- template() (templateを呼び出し返値を得る)
    matchreplace(p,t) (2つの返値を引数としてmatchreplaceを呼び出す)
  end repeat


 proc finish () =
  write rna (rnaを書き出す)
  exit      (&quot;プログラム&quot;を終了させる)

**Fig6 パターン
 Pattern ::= PItem* (Pattern is array&lt;PItem&gt;)
 PItem   ::= Base (I | C | F | P　一つ)
        </description>
    <dc:date>2008-05-16T12:11:23+09:00</dc:date>
    <utime>1210907483</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ranha-icfp/pages/18.html">
    <title>A piece of advice(chap 6.)</title>
    <link>https://w.atwiki.jp/ranha-icfp/pages/18.html</link>
    <description>
      *A piece of advice(ちょっとしたアドバイス)
遠藤を助けようとしているあなたに、最高の謝意を表します。

私達が助けに応えるべくこの詳細とインフラストラクチャーを準備している間に、
不幸にも遠藤のDNAを自力で少々解析する事になってしまいました。
しかし、私達はあなた方と共有したい少数の事柄を発見したのです。

まず、DNA文字列から遠藤を合成し出す事は非常に複雑で、
プロセスのシミュレーションでさえ効率的な実装を要求します。

アイディアを与えるならば、遠藤のDNA実行で、executeは1891886 iterations呼ばれ、
302450のRNAコマンドを生成し、そのコストは192646205にも及びます。
特別重要に思われるのは、skipsと、unquoted references(何の事やら)との結合の2つの実行が線形時間よりも
良く(多分対数時間)で実行される必要があるという事。

次に、私達は次のprefixを使った時に気になる事が起こるのに気がついたのです
	IIPIFFCPICICIICPIICIPPPICIIC
幸運を、そしてモーフィングを楽しんで！！    </description>
    <dc:date>2008-05-16T02:16:52+09:00</dc:date>
    <utime>1210871812</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ranha-icfp/pages/17.html">
    <title>2007/問題文/From RNA to Fuun</title>
    <link>https://w.atwiki.jp/ranha-icfp/pages/17.html</link>
    <description>
      *4. RNA から Fuun へ

人間と同様に、ふーん RNA はたんぱく質の合成を指示し、結果として生物の形を得ます。我々は生き物をアセンブルする能力を持っていないので、生き物のアセンブルを実行できるのは宇宙船 Arrow のみということになります。しかし幸いにも、我々は結果として生じる生物の形態と、その環境を示す画像にたどり着くことができます。このセクションでは、ふーん RNA を表示する方法について、我々が把握していることを説明します。

図2から、ふーん RNA がながーい命令のリストであることを思い出してください。それぞれのコマンドは7個の塩基からなる DNA 文字列によって表されますが、最後の RNA 命令だけは7個よりも少ない塩基で表されるかもしれません。ふーんを RNA からビルドする間、それぞれの RNA が処理され、内部の状態はアップデートされていくでしょう。結果として生じる画像は、その内部状態の一部に他なりません。

画像を表すデータ型を図17の中で説明します。「座標（Coord）」は、0 から 599 までの自然数であり、座標のペアは「位置（Pos）」を表します。「Component」は 0 から 255 までの自然数で、3個の component が組み合わさって、「RGB 値（RGB）」になります。「Transparency （もしくは alpha）」は component の1種であり、いくつかの色はあらかじめ定義されています。とりわけ重要なことは、黒は (0, 0, 0) に等しく、白は (255, 255, 255) に等しいということです。また、transparency が 0 であるということは色が完全に透明であることを意味し、transparency が 255 であることは色が完全に不透明であることを意味します。

Bitmap は pos によって索引付けられる配列であり、(0, 0) から (599, 599) までのそれぞれの要素が Pixel になっています。pixel は RGB と transparency のペアからなり、位置 (0, 0) は画像の左上を、位置 (599, 599) は画像の右下を表します。bitmap b の pos p にある pixel について言及するために、我々は    </description>
    <dc:date>2008-05-19T01:28:51+09:00</dc:date>
    <utime>1211128131</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ranha-icfp/pages/16.html">
    <title>How to make Endo live(chap 5.)</title>
    <link>https://w.atwiki.jp/ranha-icfp/pages/16.html</link>
    <description>
      *5 How to make Endo live(如何にして遠藤を生かすか)
我々の仕事は遠藤を生かすDNA prefixを作る事である。
遠藤のオリジナルDNAは&quot;source&quot;image(ページにある画像の事か?)を生成する。
あなたのオリジナルDNAが後に続くあなたのprefixは、出来るだけtargetの画像に近い方が良い。
(つまり、我々がRNAに変換すべきはnewDNA = prefix+DNA)

加えて、あなたのprefixは長く無い方が良い。
それから、遠藤を修正するプロセスは多くのエネルギーを消費する様なものでは良く無い。
本セクションでは、あなたの戦略を如何に評価するかについて説明する。

**5.1 Risk of a prefix(prefixの危険性)
prefixはriskをはらんでいる。
riskは自然数で、低いriskではより遠藤の生存率が有る。
riskは次の様に定義される
	risk = 10*(不正なピクセル数)+prefix長
さて、不正なピクセルというのは、画像の206ライン上RGB値がtarget画像とずれている様なピクセルである。
注意すべきはdrawコマンド時のbitmaps[0]の透明値は255になるということ、
で、(0,0)は左上、(599,599)は右下です。
prefix長とは、prefixを構成するI,C,F,Pの数である。
**5.2 Resource limitations(限られた資源)
risk値に加えて、資源制約についても扱わなければならない。
Arrowは最終プロセスを実行し、僅かのエネルギーしか残されていない。
そういうわけで、我々はEndoを助ける前にエネルギーを使い切る様なprefixを送る事は出来ない。

次の2つの制約がある。
1.DNA文字列長は、実行時のどの段階においても2500万文字を超えてはいけない。
2.DNAコストエネルギーの検査と見積もり。プロセス実行中に、我々は3*10^9を超え無いcostコンテナを持っている。
+patternかtemplateの中で、一つの塩基は1コストを消費する。
+matchreplace時に、
++現在の塩基と定数塩基を比較する時にコスト1
++サーチの成功でコストn - i,10    </description>
    <dc:date>2008-05-16T01:36:09+09:00</dc:date>
    <utime>1210869369</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ranha-icfp/pages/15.html">
    <title>2007/問題文/Fuun DNA</title>
    <link>https://w.atwiki.jp/ranha-icfp/pages/15.html</link>
    <description>
      *Fuun DNA
Fuun DNAは、有限長の連続する4種の塩基から成り立っている。
ここでいう4つの塩基とは
 I(infinine), C(continuine), F(functorine), P(polymorphine)
の事である。
地球でのDNAとは、build planを圧縮したプログラムで、実行するとRNAを生成する。RNAは順番にタンパク構造に指示し、タンパクは全生物の品種の構造区画を構築します。

Fuunの為に、状態はほぼ同様ですが、2,3の例外が存在します。
+RNAを生産する際に、Fuun DNAを実行するとDNA自体を操作することになります。人間の場合と同じく、Fuun RNAタンパクの生成・合成を指示し、生きている状態で終了します。
+Fuun DNAはもう一つの一部を変えることが可能です。これは、もうひとつへのprefixとしてのDNAを用いることで達成されます。もう一つのFuun DNAにFuun DNAを前に付加することは、やや異なったFuunを生成します。
+Fuun DNAは作用するだけでなく即座に環境に適応するという驚くべき特徴を備えています
+地球の生物に反して、Fuunは知的デザインの結果としてそうなったと仮定されます。Endoを変える計画を助けてくれるプレゼントして、ArrowはDNAの中に作者からの「メッセージ」が含まれているかもしれない。そして、遺伝子がすでに存在するかもしれないという事実がある。とヒントを出しています。なので、我々はそれを信用しています。
我々は構築プランの作成と、その実行をシュミレートする方法を知っています。我々には、Endoをアセンブルする能力が欠如しています。Arrowはそれをすることができます。幸いにも、生物形態と、その環境の二次元の画像として、Arrowは視覚的にFuun DNAを適用する方法を説明してくれました。我々はEndoのDNAを持っており、現在の状態を視覚的に表現した画像を持っています。
Arrowは、Endoの最適修正を視覚化した「目標」画像も備えていました。完全に目標にマッチしない間、我々はEndoの生き残りの可能性をあげるため、なるべく間近まで行かなければなりません。
再連続しているDNAは、危険な事柄であり、より長いものはprefixであ    </description>
    <dc:date>2008-05-16T09:35:16+09:00</dc:date>
    <utime>1210898116</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ranha-icfp/pages/14.html">
    <title>2007/問題文/From DNA to RNA</title>
    <link>https://w.atwiki.jp/ranha-icfp/pages/14.html</link>
    <description>
      *3. DNA から RNA へ

右側の酵素に触れることにより、Fuun の DNA は変化しながら、RNA を作り出しはじめます。これを、「&quot;DNA文字列&quot;を実行する」と呼びます。泥臭いこと（化学的な意味で）は Arrow がよきにはからってくれるので、われわれはアルゴリズムの記述に専念することができます。以下は、Arrow によって与えられた（Fuun の DNA に関する）概要です。地球の変態諸氏の読みやすいように書き直してあります。

前述のとおり、DNA は図2で定義された塩基配列です。
塩基として I, C, F, P の4つが利用可能で、引用符によってDNA文字列であることを示します。例えば &quot;ICFP&quot; などです。結果として生成される RNA は、DNA 文字列のシーケンスです。

シーケンスは、DNA 文字列の実行にあたり重要な役割を担います。シーケンスは、ゼロかより多くの要素から成ります。シーケンスにおいての基本的な操作と、その記法を図3に示します。図3の操作はいずれも失敗せず、ゼロベースであることに注意してください。

サブシーケンス命令は、シーケンスの範囲外を指定したり、長さが 0 以下の範囲を指定したりすると、空のシーケンス ε を返します。範囲内を指定したとき、その部分をシーケンスとして返します。また、添字操作の例外としても ε を使います。図4は DNA 文字列に対して操作をするいくつかの例を示しています。

図5で与えられている DNA の実行の全体的な流れを見て見ましょう。このアルゴリズムは、21行目で宣言されているグローバルな DNA シーケンスに対して動作します。まず、初期 DNA が読み込まれます。初期 DNA は、コンテストの Web ページからダウンロードできる遠藤の DNA とあとに続く prefix（我々が求めることになっている）から成ります。

例外的な状態に至る（DNA 文字列が完全に消費される）まで、以下の3ステップが繰り返されます。

+DNA の接頭辞をパターンに変換(26行目)
+残りの DNA の接頭辞をテンプレートに変換(27行目)
+残りの DNA に対してパターンマッチを行い、テンプレートを使用して新しい DNA を生成

この手続きは、最終的な RNA 文字    </description>
    <dc:date>2008-05-17T02:25:11+09:00</dc:date>
    <utime>1210958711</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ranha-icfp/pages/13.html">
    <title>TnzkMemo</title>
    <link>https://w.atwiki.jp/ranha-icfp/pages/13.html</link>
    <description>
      *Tnzkのメモ
-EndoのDNAは(I, C, F, P)の4つの文字から成る    </description>
    <dc:date>2008-05-16T00:31:35+09:00</dc:date>
    <utime>1210865495</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ranha-icfp/pages/12.html">
    <title>2007/問題文/Background</title>
    <link>https://w.atwiki.jp/ranha-icfp/pages/12.html</link>
    <description>
      *Backgroundの訳はここですよ！
遠藤はふーん星の生き物で、つまり地球外生命体。
地球の環境は遠藤に宜しいとは言えない。
遠藤は運悪くなんか変なのから地球におっこちてしまった＼(^o^)／
遠藤と安心の宇宙船Arrowは落っこちた時に痛い目をみて、
さらに遠藤は追加ダメージまで食らって泣きっ面に蜂。

遠藤は今はヤバい状況で、この形のままで地球に存在出来ないしArrowも死んでまう。
Arrow(我々と連絡を取ったのは都合よくも船でしたよ！)によると、
遠藤を生き残らせる為に、地球向けにDNAを変更するしかないという事。

我々のお仕事は72時間以内に適切なDNA配列を見つけるのを手助けする事。
失敗したら遠藤は死にます。

ICFPに参加する様な変態ならきっとなんとかしてくれるよね！

我々のここまでの取り組みでふーん星人のDNA配列生成プロセスに関する
情報が分かっています。

このドキュメントの以下の文では、この配列生成に関するアルゴリズムについて述べています。    </description>
    <dc:date>2008-05-16T00:36:02+09:00</dc:date>
    <utime>1210865762</utime>
  </item>
  </rdf:RDF>
