携帯電話の通信速度が著しく遅くなっているが、当日記の git push くらいならなんとかなるようだ。 日付が変わったし、明日の朝も掃除の仕事がある。消灯して寝る。猫の動画?

7:05 起床。朝食をとって出勤。

10:00 清掃を終わる。撤収。コンビニに寄ってビッグコミックやモーニングを気になるところだけチェック。

10:40 曳舟の部屋に戻る。洗濯をしてから横になる。30 分後に洗濯物を干してまた横になる。

12:45 起き上がってようやく PC に向かう。おやつ休憩。ドカジャンを洗ったので寒い。

おやつを食い終わり、ひたすらドラクエの解析作業を続ける。 きのうの日記のようにコードを組み替えてデバッグする。うん、具合がいい。

16:00 ドラクエ 5 のレベルアップ必要経験値の計算アルゴリズムを Python コードで完全再現することに成功したと思われる。デバッグが大変だった。 次の成長アルゴリズムを見る前に PDB の使い方をもっと練習しよう。

いずれにせよ答え合わせをしたいところだが、ROM イメージが手許にないので正解が手許にない。 あと、アルゴリズムの論述が意外にややこしい。未だに構想がまとまらない。 経験値の階差数列がわかりやすい性質を持っているというのは、記憶違いだった。 問い合わせてくれた方に申し訳ない。

外出しようとドアを開けたら、郵便屋サンがいきなりいて驚く。手紙を二通受け取る。 一通は年金事務所の控えの件で、もう一通はパートタイムの契約書。これを記入して郵送するのか。 今書いてしまう。朱肉がないので郵便局に直接行く。

外は雪が降っている。イトーヨーカドーの向こう側の郵便局に行き朱肉を借りる。 そのまま局員に封筒を渡して終わり。

押上一丁目のバス停から錦糸町駅前行きバスに乗る。太平四丁目で降りる。

17:00 タイトー F ステーションオリナス錦糸町店。9 クレぶっこむ。 なんだか食費より高い気がするが今月は生活費が多めにあるので大丈夫。

MJ プロ卓東風戦。引き続きボコボコ。 正解の手順を踏んでいる手応えがあるのにラスで終了するゲームが多い。

【SCORE】
合計SCORE:-180.9

【最終段位】
四人打ち段位:風神 幻球:8

【1/28の最新8試合の履歴】
1st|-*------
2nd|--------
3rd|*--*-***
4th|--*-*---
old         new

【順位】
1位回数:2(18.18%)
2位回数:0(0.00%)
3位回数:5(45.45%)
4位回数:4(36.36%)
平均順位:3.00

プレイ局数:53局

【打ち筋】
アガリ率:7.55%(4/53)
平均アガリ翻:4.25翻
平均アガリ巡目:14.50巡
振込み率:11.32%(6/53)

【1/28の最高役】
・跳満
・跳満

二着がゼロ回か。どうりでクレがいつもよりかかったわけだ。

20:05 カスミオリナス錦糸町店。374 円。クーポンゲット。

  • 唐揚弁当
  • ブラックチョコ

20:25 ビッグエー墨田業平店。304 円。

  • 大きなおむすび豚味噌
  • コロッケドッグ
  • 大きなりんごデニッシュ
  • おにぎりおかかとツナの醤油ご飯

20:40 曳舟の部屋に戻る。帳簿、日記、晩飯&麻雀の練習。テザリングでインターネットに接続。 通信制限がかかって速度が遅いが、強引にドラクエ 5 の主人公のレベルアップ経験値のデータを取得する。 このページはなかなか便利だ。 必要経験値の列の値をざっと見た感じでは、さっき私が計算した値と一致していそうだ。 あとで正式に差分を確認する。

それにしても、通信速度が遅くなっていると Twitter の画面が開かない。これはキツイ。

携帯電話のケーブルを PC から抜いてさっきの差分を取る。 極限攻略サイトの HTML ファイルの 9 番目の列が経験値なので、BeautifulSoup の力で抽出してテキストファイルに保存する。 単純に soup.select('td:nth-child(9)') をループで回して .strings を参照すればいい。 そして WSL 上で diff コマンドを実行。素晴らしいことにすべて一致した。

きりがいいところで入浴にする。22:35 出る。

解析の仕上げ。コードを論述する。 Twitter 経由での依頼だったのでメモを撮影して Twitter に無理して投稿しておく。 もちろん、浄書版はドラクエ命に組み込む。

最後に、ローカルに保存してある怒っている猫のしゃべるビデオを試聴して寝るか。

ドラクエ 5 レベルアップ必要経験値 解析ノート

このメモでは、ドラクエ 5 のレベルアップ必要経験値アルゴリズムを簡単に述べる。 説明用に記号を次のようにおく:

  • $E_n$: レベル $n$ に必要な経験値。 例:キャラクターが主人公ならば ${E_1 = 0,:E_2 = 10,:E_3 = 59, \dotsc.}$
  • $F_n$: $E_n$ を計算するときに用いる調整のための値。アルゴリズムで決定される値。
  • $a_n$, $b_n$: $E_n$ を計算するときに参照される、ROM で定義済みの係数。 例:キャラクターが主人公ならば ${a_3 = 2,:b_3 = 2.}$

次に $E_n$ を計算するアルゴリズムの概略を記す。 この値は帰納的に計算されるが、紙幅の都合でステップ $n$ のみを説明する。

  • $\varDelta_n \coloneqq E_{n - 1} - E_{n - 2}.$
  • $F \coloneqq F_{n - 1} + 32 - F_{n - 2}.$

    ただしこの結果 $F \ge 32$ となる場合には追加的に ${F \coloneqq F - 32}$ とする。

  • コア計算
    • $p_1 \coloneqq \varDelta_n a_n,$
    • $p_2 \coloneqq \varDelta_n b_n,$
    • $p_3 \coloneqq F a_n,$
    • $p_4 \coloneqq F b_n,$
    • $s \coloneqq p_2 + p_3 + p_4,$
    • $\varDelta \coloneqq p_1 + (s » 5).$
  • $E_n \coloneqq E_{n - 1} + \varDelta.$
  • $F_n \coloneqq F_{n - 1} + (s:\&:31).$

    ただしこの結果 $F_n \ge 32$ となる場合には追加的に次の計算をする:

    • ${E_n \coloneqq E_n + 1,}$
    • ${F_n \coloneqq F_n - 32.}$

以上