ジョインアベニューの日替わりseedの周期
ポケモンBW2のジョインアベニューの日替わりseedで使われている漸化式がちょっとおもしろいです。
s[n+1] = ((s[n] * 0x5d583d6d6c078979 + 0x26a693) mod (2^64)) >> 32
まず、0がこの漸化式の不動点になることがわかりますが、実際のゲーム中では0になったときは全く新しい値で初期化されるようになっています。
この数列は大部分の初項については途中から循環が始まる準周期的数列になります。図で書くとσの形になるだとかカタツムリの形になるとかいってもいいかもしれません。
そこで循環部分がいくつ存在して、それらの周期はいくつなのか、ひたすら計算させて調べてみました。
周期 | 循環部分から1つ代表させたseed |
---|---|
83458 | 79f18008 |
123305 | 2134bc83 |
31719 | 86e648d5 |
2598 | 12719a8c |
2466 | 6cf5a895 |
773 | 0e50bafa |
6 | 6a3db7e0 |
25 | 04cbaf9f |
15 | 1c905da4 |
1 | 00000000 |
1 | eae02079 |
このように循環部分は11個あり、そのすべてが比較的短いことがわかりました。
さらに0x00000000に至るseed全体をグラフにしてみました。
面白いですね。
周期が6の循環部分に至るseed全体のグラフも書きたかったのですが、6a3db7e0で初めて循環部分にいたるようなseedが84256個もあってうまくいかず。他の5つのseedは13個とか8個とか0個とかとっても少ないのに…。