バトルファクトリーの最初の6匹を解析してみる その6
今まで6匹の性格値が決定してから相手の3匹の種類が決定されるまでの乱数消費量は1か2でなんらかの条件によって変わると思っていた。しかし、実は一律2なのではないかと考えた。
以下のデータを例にしてみる。
初期seed: 0xff15020e
6匹: ヒトデマン,クチート,ドードー,チルット,カラナクシ,サイホーン
3匹: ベロリンガ,ポッチャマ,ゴマゾウ
6匹の種類と性格値で消費された乱数の範囲は20-260だ。
そして、相手の3匹の種類の決定は以下のようになっている。
262: 0xe419488c 150 - 0xe419 % 150 = 107 ドゴーム (アイテム重複のため無視) 263: 0x7b26ec0f 150 - 0x7b26 % 150 = 124 ベロリンガ 264: 0xae1974d6 150 - 0xae19 % 150 = 131 ヤンヤンマ (アイテム重複のため無視) 265: 0x95f45391 150 - 0x95f4 % 150 = 12 ポッチャマ 266: 0xbda42330 150 - 0xbda4 % 150 = 52 ヤドン (アイテム重複のため無視) 267: 0x28bbfbe3 150 - 0x28bb % 150 = 73 ゴマゾウ
262から始まっているので合間の乱数消費量は1だ。しかし263からはじめても消費される乱数の終端や順番が一致する。このような消費される乱数の終端も順番も一致していて複数通りある場合は数値が小さい方しか記録していなかった。合間の乱数消費量が2でない記録はすべてこのような例ではないのかと考えたのだ。
というわけでそれを確かめるプログラムを書いた。
tmpscript/check-interval.rb at master from oupo's factory-tools - GitHub
実行結果
20091020-004.txt: true 20091020-005.txt: true 20091020-011.txt: true 20091020-013.txt: true 20091020-018.txt: true 20091020-022.txt: true 20091020-029.txt: true 20091021-002.txt: true 20091021-006.txt: true 20091021-029.txt: true 20091021-037.txt: true 20091021-042.txt: true 20091021-043.txt: true 20091021-044.txt: true 20091021-052.txt: true 20091021-054.txt: true 20091021-056.txt: true 20091021-058.txt: true 20091021-071.txt: true 20091021-073.txt: true 20091021-078.txt: true 20091021-079.txt: true 20091021-081.txt: true 20091021-091.txt: true 20091021-092.txt: true 20091021-099.txt: true 20091021-104.txt: true 20091021-121.txt: true 20091021-128.txt: true 20091021-129.txt: true true: 30, false: 0
はい、やっぱりその通り。ということで乱数消費は一律2で間違いなさそう。