rusted-coil old blog

はてなダイアリー上で書かれていた旧東方錆恋録 ~Slipping Rusted Magnemite~のデータをそのままインポートしたブログです。リダイレクト先を変える前に気づいたらダイアリーがサービス終了していたので、とりあえずリンク切れを防ぐため公開しています。

孵化乱数列パズル 解答と解説

問題

以下の個体値コイキング♂♀(持ち物なし、同国籍)を預かり屋に預ける。

性別 H A B C D S
コイキング 25 11 27 29 0 31
コイキング 8 2 26 4 12 18

タマゴが出来ていないある時点でレポートを書き、タマゴをn個受け取り拒否→n+1個目を受け取った場合の生まれたコイキング個体値を調べたところ、以下のようになった。

n H A B C D S
0 14 2 27 4 0 18
1 25 4 27 14 18 18
2 4 23 27 18 12 18
3 8 23 14 29 12 9
4 14 18 27 9 12 18
5 18 11 9 29 12 21
6 18 11 27 3 9 31
7 3 11 26 22 12 6

この時、個体の生成に使われた乱数の偶奇はどのようになっているか。

解説

まずは生まれた個体の遺伝箇所を特定する。♂を青、♀を赤とすると以下のようになる。

nHABCDS
0142274018
125427141818
242327181218
38231429129
414182791218
518119291221
61811273931
73112622126

(0番目の個体は自然発生が遺伝候補の個体値と被っているため遺伝箇所3つを特定できない。)

また、簡単のため、遺伝箇所決定前の消費(5個)は無視して考える。(上に5個未知の乱数が増えるだけなので問題には関係ない。)


まず、基礎個体値を照らし合わせて、それぞれの個体の由来になっている基礎個体値の乱数6個を特定する。

ここで、個体値により偶奇が求まる乱数があり、

  • 偶数=HBD=先親、奇数=ACS=後親 …… (1)

の関係を使い遺伝情報を埋める。

  • 遺伝に使われた乱数のうち最初の2個(パワー系無しの場合)と最後の2個は必ず有効な遺伝 …… (2)

であるため、4,5の個体の最後の遺伝親が決まる。
また、(1)より4の最後の遺伝箇所はHBDのいずれかなので、遺伝箇所より「D後」のものであるとわかる。
さらに、2と3の個体を比較すると、遺伝箇所が1箇所しか被っておらず、最後の遺伝箇所に使われる乱数の位置は共通している。
よって、個体値4の乱数の上2つは共通の「D後」のものであることがわかる。付随して(1)より遺伝箇所Dの乱数は遺伝親が先となる。


ここで4の個体の遺伝について考えると、1つ上が有効遺伝であるとすると「D後」が2つになってしまうためありえない。よって個体値4の乱数の1つ上はスキップされていることがわかる。
さらに、その1つ上の乱数は遺伝箇所Dの乱数であり、これがスキップされたと仮定すると、「それ以前にDの遺伝が確定している」ことになり、一番最後に「D後」が遺伝することと矛盾する。よってこの乱数は有効遺伝。遺伝箇所より「B先」であると確定する。
また、3の個体においてこのBの乱数がスキップされたとすると同様に遺伝箇所としてBを持っていることになるが、3の個体の遺伝箇所にBは含まれないので矛盾する。よって3の個体でもこの乱数は遺伝親として使われ、遺伝箇所の候補より「C先」であるとわかる。
一方2の個体はCを遺伝箇所として持っていないため、Bの乱数はスキップされている。


同様の議論により「C/後」の乱数は4の個体で使われており、その遺伝は「S後」である。
これで4の個体の全ての遺伝箇所が判明したため、遺伝決定の乱数の範囲の上端がわかった。
上端が決まったため3の個体の最初の遺伝は残っている「H後」で確定する。
また、2の個体も使える乱数が4個で遺伝が2箇所未確定なので、これは「B先」「S後」であるとわかる。


(2)より5の個体の最初の遺伝が「C先」であることが決まり、順に処理していけば5の個体の遺伝箇所決定も全て求まる。
1の個体に関しても、Cを遺伝に持たない以上「C/後」をスキップしていることはないためパターンは1通り。


ここで0の個体の最初の遺伝について考えてみると、個体値表より0の先親遺伝候補はBかD。
最初の遺伝が「B先」と仮定すると、次の乱数はBで被っているためスキップされる。
この場合遺伝箇所に「H後」が含まれてしまうが、0の個体はHを遺伝していないためありえない。よって0の個体の最初の遺伝は「D先」となる。


7の個体も現在明らかになっている情報を反映すると以下のようになる。


ここで、6の個体の2番目の遺伝について、乱数は後=奇数であるため遺伝箇所として使われる場合はACSのいずれか。6の個体はまだこれらの遺伝は確定していないため確実に有効遺伝となる。


ここで、仮に6の個体の2番目の遺伝が「A先」であると仮定する。
すると、6の個体の残る遺伝は「S先」であるため、"それ以外の箇所を遺伝しないために"以下のように表が埋まる。


しかしこの時、遺伝が確定した7の個体の基礎個体値を考えると「H3」が既に「個体値9」であるとわかっている乱数にぶつかってしまうため、矛盾する。

よって※の仮定は誤りであり、6の個体の2番目の遺伝は「S先」の方となる。
この時表を埋めると以下のようになる。


なお、埋まっていない項に関しては、現状のデータだけでは確定しないことを示すことができる。
というのも、以下のようなパターンである時、偶数でも奇数でもこのデータの上では矛盾のないようにとることができるため。