メモ - 貧弱な8bitマイコンで比較的楽に曜日計算をする

曜日計算はツェラーの公式が有名であるが、8bitマイコンで馬鹿正直に実装すると普通に{オーバーフローして,16bit以上の演算が必要になって}爆発する。 ので、ツェラーにこだわらず8bitマイコンで比較的楽にやっていける方法をぼーっと考えた。基本的に8bitマイコンを叩ける言語はC言語以外選択肢がないのでC言語である(アセンブリは流石に……)。

2000-2099に限定して実装する

これで限定すると何が嬉しいかというと、100年毎の閏年解除を気にしなくて良い所。2000年は400で割れるので都合よく閏年カウントできる。 1年毎に1日、4年毎にさらに1日、月毎のズレはリスト参照して……ってやるのが多分マシな方法かなぁ。

  • 入力 : 西暦下2桁, 月(1オリジン),日(1オリジン)
  • 出力 : {0,1,2...6} ≡ {日,月,火...土}

gist.github.com

0-9999に限定して実装する

gist.github.com

分けて計算してるのもっとスマートにできそうな気もするが8bit縛りだとなかなかめんどくさそうだ。 if文もちょっと最適じゃない気もするがこんなのコンパイラがちょちょっとなんとかしてくれるでしょ知らんけど。

その他

西暦1万年見えてきたら流石に8bitマイコンで暦計算はよしてもろて……。 まあこんな都合良いデータ(2桁ずつに区切られてるとか)で渡されるシチュエーションも少ないだろうし、そもそもRTCモジュールが内蔵されてるか外付けしてそれらに時計機能やら曜日計算を任せるかするのが現実的な話になるだろうし、参考にもならなそう。だめじゃん。