ポケモンSMのID乱数用初期seed特定APIができました

前回と同じくタイトルそのままです.
サーバに著しく負荷をかける行為はお止め下さい.

初期seed特定の仕組み

ポケモンSMで”さいしょからはじめる”を選んだ場合,”つづきからはじめる”を選んだ場合と同様に32bit整数でSFMTが初期化され,人間が初めて針を観測できるまでに1012個の乱数が消費されます.データベースについてはSFMTの針データベース作成プログラムの消費数を417から1012に変更したものを使用します.
主人公の名前入力が終わった後の確認画面で針を観測することができますが,名前入力中から針は生成され進行しているため,表示までラグが発生します.名前入力を一定のタイミングで行い,全てのラグの範囲を考慮して初期seedを検索することで,この問題を解決します.
具体的な乱数調整についてはサンムーンID調整 を読んで下さい.

使い方

URLを叩くだけです.
例えば,名前入力を一定のタイミングで行った時に 2 14 05 6 10 15 7 6 6 3 6 12 という針が観測されたなら,クエリ文字列の部分に指定して検索します.この時ツール内部では,0から16までの数字それぞれを各針の値に足すことで,17通りの全てのラグのパターンを考慮した検索を行っています.
http://49.212.217.137:19937/gen7/sfmt/seed/id?needle=2,14,5,6,10,15,7,6,6,3,6,12
この場合,次のような結果が返ってきます.

1
{"results": [{"add": "10", "seed": "01919810", "encoded_needle": "0d59b899", "step": "1012"}]}

これは,初期seedは 0x01919810 で,ラグは針10個分進んでいたと解釈します.
つまりもしもラグなしで針を観測できていたら 9 4 12 13 0 5 14 13 13 10 13 2 だったということになります.

技術的な問題

APIの公開を予告してから,実際に公開するまで数日間の遅れがありました.遅れた原因は公開するAPIの機能に針の「あいまい検索」を実装しようと考えていたためです.あいまい検索とは,人間が観測した針の値だけでなくその周辺の針も考慮して検索する機能のことです.この機能を実装するとデータベースにアクセスする回数が指数的に増大し,その結果ディスクIOがボトルネックとなり高速なレスポンスを実現出来なくなりました.なんとかこの問題を解決しようと試みましたが,メモリ1GBで外部記憶がHDDの現在借りているVPSでは不可能と判断して,あいまい検索を実装していないAPIを公開することになりました.
あいまい検索を行いたい人はろいしんさんの公開しているローカルにデータベースを作るツールを使ってください.