幻想郷の紀年法を算出する

平成最後の日です。

ということで、何かと暦を気にする時分なわけですが、ここに来て幻想郷紀年法に基づく対応表というページが404 Not Foundとなってしまっているようです。

そこで、自分なりに西暦から幻想郷の紀年法に変換する「仕組み」を作れないか、と考えました。

ここで「仕組み」と言ったのは、幻想郷の紀年法にもルールがあるため、プログラムで実装できるのではないか、と考えたためです。

改めてルールを書き出してみると、以下のようになります。

  • : 1885年を第零季とし(東方Wikiより)て、以降1年毎に1増加(インクリメント)。例えば、2019年は2019-1885=134のため、第百三十四季となる。
  • : 年は「▲と■と★の年」という形式で記述する。例えば、1885年は「日と春と土の年」、2019年は「星と秋と金の年」となる。なお、「▲」「■」「★」に当てはめられるのは下記を参照。
    • ▲に当たるグループ: 日、月、星(三精)
    • ■に当たるグループ: 春、夏、秋、冬(四季)
    • ★に当たるグループ: 土、火、水、木、金(五行)
      • 「▲」「■」「★」は最初の文字から1年毎に1つずつずれて、最後まで行ったら最初に戻る
        • 例: 「日と春と土の年」→「月と夏と火の年」→「星と秋と水の年」→「日と冬と木の年」→「月と春と金の年」→「星と夏と土の年」→…
        • このルールのため、60年で表記が一巡する
  • 特殊事項:
    • 1885年より前(1884年以下)は計算不可としてエラーにします
    • 「日と春と土の年」に該当する年(1885年以降、60年おき)は幽霊が大量発生する年として、特殊表示を行う(花映塚の2005年も該当)

これを実装したのが下記ページとなります。

元号の境界付近でもぞもぞと作ったので、メインカラーは紫にしました。胡散臭そう

実装してみた感想ですが、そこそこシンプルなルールでありつつもエラー処理と特殊事項があるため、プログラムの練習には良い教材かもしれないと感じました。

1885年より前の年を変換しようとした際に表示されるエラー
1885年より前の年を変換しようとした際に表示されるエラー「明治十七年より前の上海アリス」

エラー処理も「ただのエラーです」だとちょっとアルコール分が足りないので、固い頭をひねってほんの少しだけ柔らかくしました。

あと、上記ルールで三精・四季・五行と並んでいるので、ここを普通の命名規則にすると勿体無いですよね、という謎の理論で変数名をちょこっと細工しました。

    const sangetsusei = ["日", "月", "星"]
    const eiki = ["春", "夏", "秋", "冬"]
    const patchouli = ["土", "火", "水", "木", "金"]

はい。サニー・ルナ・スターと、映姫様と、そしてパチュリーさんです。これでほんの少しだけ、幻想分を足しました。

折角の機会なので、少しでも幻想分の足しになれば良いなぁ、と思います。

以上を以て、私の平成最後のプログラミングは幻想郷の紀年法を算出するJavaScriptになりました。

余談ですが、私は2004年に東方を知ったので、今年で15年になります。平成の半分は東方と共に歩んだと言えると思うので、自分らしい「平成最後」なのではないか、と思います。

参考

この記事を書いた人

アルム=バンド

東方Project から神社と妖怪方面を渡り歩くようになって早幾年。元ネタを調べたり考察したり巡礼・探訪したりしています。たまに他の事物も調べたりします。
音楽だと Pain of Salvation を中心に Dream Theater などのプログレッシブメタルをメインに聞いています。
本は 平行植物 。