サマーウォーズの誕生日から曜日を当てる方法!?簡単に出す方法とは!

映画

こんにちは。

2017年の8月の18日に「金曜ロードショー」で再放送されることが決定しました。

管理人はこの映画がとても好きで、全セリフを覚えるくらい何回も何回も録画した動画を見たことを覚えています。

その中でも主人公である健二くんが新幹線の中で夏希先輩の誕生日を聞き即座に曜日を返すシーンが有りました。

実際曜日は当たっているのですが夏希先輩は自分の生まれた日の曜日を知りません(笑)

今回はその手法「モジュロ演算」と言うものについて書いていきたいと思います。

難しい数学の話ですので「さっぱり笑」みたいな話ですが、このページに来てくれた方はモジュロ演算を誰かに披露したい方が大半だと思いますので、そんな難しい話は全カット

です(笑)

ではモジュロ演算について見ていきましょう。

スポンサーリンク

簡単に生年月日から曜日を出す「モジュロ演算」について

この計算は要するに「余り」を計算しようという計算です。

“余り”は割り算の”余り”です。

5を2で割ったら”余り”は1です。

モジュロ演算では生年月日を式に代入して、その余りを曜日に当てはめることで生年月日から曜日がわかるということです。

実際に当てはめる公式は?

実際にはツェラーの公式というものに当てはめるのですが以下ウィキペディアの引用です。

 年  月 日の曜日を求める。

ただし、1月2月は、前年のそれぞれ13月・14月として扱う。たとえば、2017年1月1日・2月1日は、2016年13月1日・14月1日とする。また、紀元前  年は西暦  年として扱う。たとえば、紀元前1年・前2年・前3年は、0年・-1年・-2年となる。

曜日を表す は次の式で求められる:

 はグレゴリオ暦 (Gregorian) かユリウス暦 (Julian) かで変わる項で、

ただし

 。

はxを超えない(x以下)の最大の整数(床関数)、 は  を  で割った剰余である。 と  は、(西暦が4桁の場合)西暦の上2桁と下2桁を表す中間変数で、たとえば2017年なら、それぞれ20と17になる。

曜日
h 1 2 3 4 5 6 0
D 7 1 2 3 4 5 6

 は、0~6で土曜日~金曜日を表す。現在標準的な ISO 8601 の(1~7で月曜日~日曜日)を求めるには、次の式

を使う。

これらの計算式は、それぞれの暦を過去または未来に延長して使うならば、有効範囲の限界はない。ただし、歴史上の日付を扱うには、現代使われているグレゴリオ暦に切り替わった日付に注意が必要である。詳細はグレゴリオ暦#グレゴリオ暦の各国・各地域における導入を参照。さらに西暦4年3月1日以前は閏年の規則が異なるので、ユリウス暦の公式も適用できない。

wikipediaより

もう読みたくありませんね。飛ばしている方、それが正解です(笑)

では、こんな公式使わずとも簡単に求める方法をご紹介します。

その前に少し、暗記さえできれば求めれる方法を見ていきましょう

モジュロ演算ツェラーの公式利用方法

実際に計算するのがやはり一番伝わりやすいのでその方法を実際の数値に当てはめて見ていきましょう。

では再放送の日 2017/8/18 (金曜日)を求めてみましょう

まず、西暦の4桁の数字のうち下2桁(今回の場合は17)を覚えておきます。

次に、その2桁を4で割ります。17÷4=4あまり1なので、”商”の4を覚えておきます。この時の余りは無視していただいて大丈夫です。

そして、月の数字を下の表に当てはめます。

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

今回の場合は8月なので 3 ですね。これを覚えておきます。

そして、日にちを覚えておきます。今回は18です。

最後に覚えた数字をすべてを足します。17+4+3+18=42 出た数字を 7 で割り、この時の余りを曜日に変えるとその日の曜日がでてきます。注意ですが2000年以上は、足した数字からー1して下さい。(42-1=41

今回の場合は41÷7=5余り6ですので以下の表に当てはめると曜日が出てくるわけです。 

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

今回は金曜日が答えなので正解ですね。

なんとも長いしめんどくさいですね。

ではここからが本題です。

簡単に求める方法

最初は時間がかかるかもしれませんが覚えればぱぱっとできてすげぇーってなるので頑張りましょう!

以下は私が発見したものではないですので引用という形を取らせていただきます

慣れれば10秒ぐらいで計算できます。
 
①準備
曜日を、日=1、月=2、火=3、水=4、木=5、金=6、土=7と割り当てます。
指の関節に、各曜日の番号を図のように割り当てはめる。
はじめは1の位置を親指で押さえておき、年月日それぞれで必要な数字だけ移動させて行き、
最後に親指がとまっているところが答えとなる曜日となります。
7まで移動した後は、1に戻って循環します。
 
②求める月が1,2月の時は求める西暦年から1をひく。
③親指を1の位置に置き、400の倍数のうち、西暦年を超えない最大値を年の初期値とする。
1900年代なら1600、2000年代なら2000となる。
④求める西暦年になるまで、下記リストのうち、大きい数字から順に足していく。
このとき、足す数字に対応する数だけ指を移動させる。
括弧内の数字は、逆方向に移動させたときの数字。
★100年:5(-2)
   40年:1
   20年:4(-3)
    8年:3
★  4年:5(-2)
★  1年:1
※★以外の数字は使わなくても構わない。
⑤下記の表から、求める月に対応する数だけ移動させる。
 1,5月:1
   8月:2
3,11月:3
2, 6月:4(-3)
9,12月:5(-2)
4, 7月:6(-1)
  10月:0
⑥現在の指の位置は、下記日付のいずれかとし、求める日になるまで1ずつ移動させる。
たとえば、求めたい日が20日なら、現在位置を15とし、16→17→18→19→20と数えながら3つ移動する。
あるいは22日として、逆方向に二つ移動させてもよい。
1,8,15,22,29
⑦今押さえている指の数字が求めたい曜日となる。
実際にやってみましたが、んー最初は難しいですね。
やはり月に対応する数字を暗記するのが一番厄介でしょうか。しかし数をこなせば簡単に計算できるのではないでしょうか。

まとめ

簡単に計算できるというのはあながち間違いではないですがやはり”慣れ”になってしまうのは仕方がないようですね。

実際何回かやっていますがなかなか覚えることができません….

今回はモジュロ演算について取り上げてみましたが、一番最初に書いた通りサマーウォーズ自体、私が大好きな映画ですしとてもおすすめの映画です。

ぜひ時間のある方はご視聴して下さい。

コメント