平成最後の日です。
ということで、何かと暦を気にする時分なわけですが、ここに来て幻想郷紀年法に基づく対応表というページが404 Not Foundとなってしまっているようです。
そこで、自分なりに西暦から幻想郷の紀年法に変換する「仕組み」を作れないか、と考えました。
ここで「仕組み」と言ったのは、幻想郷の紀年法にもルールがあるため、プログラムで実装できるのではないか、と考えたためです。
改めてルールを書き出してみると、以下のようになります。
- 季: 1885年を第零季とし(東方Wikiより)て、以降1年毎に1増加(インクリメント)。例えば、2019年は2019-1885=134のため、第百三十四季となる。
- 年: 年は「▲と■と★の年」という形式で記述する。例えば、1885年は「日と春と土の年」、2019年は「星と秋と金の年」となる。なお、「▲」「■」「★」に当てはめられるのは下記を参照。
- ▲に当たるグループ: 日、月、星(三精)
- ■に当たるグループ: 春、夏、秋、冬(四季)
- ★に当たるグループ: 土、火、水、木、金(五行)
- 「▲」「■」「★」は最初の文字から1年毎に1つずつずれて、最後まで行ったら最初に戻る
- 例: 「日と春と土の年」→「月と夏と火の年」→「星と秋と水の年」→「日と冬と木の年」→「月と春と金の年」→「星と夏と土の年」→…
- このルールのため、60年で表記が一巡する
- 「▲」「■」「★」は最初の文字から1年毎に1つずつずれて、最後まで行ったら最初に戻る
- 特殊事項:
- 1885年より前(1884年以下)は計算不可としてエラーにします
- 「日と春と土の年」に該当する年(1885年以降、60年おき)は幽霊が大量発生する年として、特殊表示を行う(花映塚の2005年も該当)
これを実装したのが下記ページとなります。
元号の境界付近でもぞもぞと作ったので、メインカラーは紫にしました。胡散臭そう。
実装してみた感想ですが、そこそこシンプルなルールでありつつもエラー処理と特殊事項があるため、プログラムの練習には良い教材かもしれないと感じました。
エラー処理も「ただのエラーです」だとちょっとアルコール分が足りないので、固い頭をひねってほんの少しだけ柔らかくしました。
あと、上記ルールで三精・四季・五行と並んでいるので、ここを普通の命名規則にすると勿体無いですよね、という謎の理論で変数名をちょこっと細工しました。
const sangetsusei = ["日", "月", "星"]
const eiki = ["春", "夏", "秋", "冬"]
const patchouli = ["土", "火", "水", "木", "金"]
はい。サニー・ルナ・スターと、映姫様と、そしてパチュリーさんです。これでほんの少しだけ、幻想分を足しました。
折角の機会なので、少しでも幻想分の足しになれば良いなぁ、と思います。
以上を以て、私の平成最後のプログラミングは幻想郷の紀年法を算出するJavaScriptになりました。
余談ですが、私は2004年に東方を知ったので、今年で15年になります。平成の半分は東方と共に歩んだと言えると思うので、自分らしい「平成最後」なのではないか、と思います。