見出し画像

サマーウォーズの曜日を計算するやつ(モジュロ演算)

劇場公開15周年を記念して、
7月26日よりサマーウォーズがリバイバル上映される

サマーウォーズの名シーンといえば最後のRSA暗号を解くシーンだが、
冒頭のなつき先輩の生まれた曜日を計算するシーンも印象的である

劇中では曜日の計算方法をモジュロ演算と説明しているが、
いわゆるmodであり、普通そうは説明しないだろうと思ってしまう

計算方法を解説しているサイトは山ほどあるので調べてもらうとして、
自身がいろんな人に誕生日を聞いて暗算して曜日を求めた経験をもとに、
習得するコツを伝えたいと思う

ツェラーの公式
h=(d+[26(m+1)/10]+Y+[Y/4]-2[y/100]+[y/400])mod 7

y/m/d

Yは年の下2桁
[x]はxを越えない最大の整数
はやい話が小終点以下を切り捨てた値

mod 7は7で割った余り

これらを計算してhを求める
h=0が土曜日であり、
以降1が日曜日、2が月曜日と言うふうに続く

0:土
1:日
2:月
3:火
4:水
5:木
6:金

modの計算では、各項を後で合算できる特徴がある

もう少し簡単に計算する方法
こうして式を見て思うのは、
26(m+1)/10の計算が大変そうなのと、
1900年代、2000年代に絞れば楽そうだなと言うこと

月は12月までしかないので、全部の計算結果を覚える
1900年代と2000年代だけあらかじめ覚える
これで、計算量がかなり減る

1月:1
2月:4
3月:3
4月:6
5月:1
6月:4
7月:6
8月:2
9月:5
10月:0
11月:3
12月:5

1900年代→1
2000年代→0
ただし、1月、2月は前年の13月、14月として計算する

こうすることによって、
①年の下2桁の計算
→下2桁のmod7+下2桁を4で割った商のmod7を計算
②月から暗記した値を思い出して足す
③日付を足す
④1900年代の場合は1を足す
⑤出てきた0〜6に対応する曜日が答え
と、シンプルになる

実際にやってみよう
例題:1996年9月21日

Yの下2桁:96
→7で割った余りは5
Yの下2桁を4で割った商:24
→7で割った余りは3
5+3=8で7で割った余りは1
指で1を作って覚えておく

9月:5
→先の1と足して6

日にち:21
21+6=27で7で割った余りは6

1900年代は+1
→7で割った余りは0になるので、土曜日だとわかる

1月は1、2月は4、3月は3と覚える
4、5、6月は614はぺろりんの周年だから覚えられる
7、8、9月と10月11月12月の625と035はなんとなく韻を踏んで覚える
7月は1引いて6、10月は0と覚えると、残り2つは思い出せるだろう



使い道
何度か計算をすると気づくかもしれないが、
1900年代は大変だけど、2000年代は計算しやすい
まずは、毎日、今日の日付を計算をするとなれていくだろう

今までで、計算できるようになってよかったと思った瞬間
イベントが発表された時に、その日の曜日がわかったときである
(隣の人とかに聞こえるように、あぁ、土曜日かぁとか言うのである)

みんなもやってみよう!

この記事が気に入ったらサポートをしてみませんか?