ほんの少しの暗記と簡単な計算で誰でもできる曜日計算。
その計算式①はこちら。
x + y - z = 曜日
「シンプル過ぎてワケわかんない!」
仰る通りです。
x,y,zが求まらないと、例え式自体がシンプルでも意味不明ですよね。
このx,y,zを求める方法ですが、実質的な計算が必要なのはxだけで、yとzは数値を当てはめるだけです。
xは西暦から、yは月から、zは日から求まります。
ではxから求めていきます。
xを求める式は、計算しようとしている日付が閏年の1,2月か、そうでないかで2通りに分かれます。
・閏年の1,2月の場合…計算式②
x = 9 - ( a + b )
・閏年の1,2月以外の場合…計算式③
x = 8 - ( a + b )
計算式②と③の違いは9から引くか8から引くかの違いだけです。
ここで閏年補正をしています。
xを求めるのに今度はaとbが出てきました。
ここがちょっと面倒な部分です。
aとbにはそれぞれ次の数値が入ります。
aはcを4で割った商
bはcを7で割った余り
ここで新たにcが出てきました。
cは西暦を28で割った余りです。
後程例題を挙げるので今はこれでxが求められると覚えておいてください。
次にyを求めます。
yは次のリストから求めます。
1月、10月 → 1
4月、7月 → 2
9月、12月 → 3
6月 → 4
2月、3月、11月 → 5
8月 → 6
5月 → 7
つまりyには1~7の数値が入ります。
次にzを求めます。
というかzは年月日の日をそのまま計算に用います。
説明だけではわかりづらいと思うので今日の日付を元に曜日計算してみます。
今日は2016年6月8日です。
曜日は計算するまでもなく水曜日なのですが実際にその通りに算出できるか見てみましょう。
2016年6月なので計算式③を用い、a,b,cはそれぞれ次のようになります。
c = 0
a = 0
b = 0
例題が悪かったですね。
a,b,c共に0になりました。
でも、これにより
x = 8
yは6月なので上記リストから
y = 4
zは8日なので
z = 8
これらを計算式①に代入すると
8 + 4 - 8 = 曜日
曜日 = 4
となります。
これまでに挙げてきた計算式は、日曜から土曜までの曜日を、それぞれ数値に置き換えたことで導き出されました。
その置き換えは次の通りです。
日曜日 = 7
月曜日 = 6
火曜日 = 5
水曜日 = 4
木曜日 = 3
金曜日 = 2
土曜日 = 1
例題では曜日 = 4なので、このリストから2016年6月8日は水曜日ということになります。
(他の日付を元に計算した結果、曜日が1未満になったり8以上になったりした場合は、1~7の範囲に収まるように7の倍数の数値を加減してください)
需要があればお返事欄にて補足説明いたします。
46011通目の宛名のないメール
お返事が届いています
ベル
(小瓶主)
13通目の方へ
嬉しいですねー!
最もお返事が来ない小瓶だと思っていたので、1通目から読んでいただけて本当に嬉しいです♪
書いた時は、情熱のままに語っていましたが、今読んでみると…。
うん、絶望的にチンプンカンプンですね(笑)
計算式の元になった表があれば格段に分かりやすくなるので、その表もいつか投稿してみようと思います。
っていうかその表を先に投稿するべきでした(笑)
ほんと僕の小瓶で幸せな気持ちになっていただけて嬉しいです♪
曜日計算は今もたまにやりますね~。
人様に生年月日を聞いて曜日計算を披露するんですけど、「へ~、そうなんだ~」っていう反応しか返ってこないのが辛いところです(笑)
この小瓶を書いたのは3年前の6月8日で、もう3年も経つんですね。
その3年前の小瓶に温かいメッセージを贈ってくださって本当にありがとうございます。
今も曜日計算について語りたくてウズウズしちゃってます(笑)
また機会があれば語らせていただきますね♪
名前のない小瓶
面白い。
計算式はチンプンカンプンだったけど、何気にお返事欄を読んでいて一通目の出だしを呼んだ時に吹いてしまった。
もう、微笑ましいぐらいの熱意というかワクワク振りが、もうチンプンカンプンそっちのけで楽しくなってきました。
とてもいいキャラクターですね。(あ、もし不快な表現だったらごめんなさい)
なんというか…久しぶりにクスッと笑えた事と、スリザリンさんの人柄に、なんだか幸せな気持ちにして頂きました。(あれ?これも不快かもかな…違うんですけど…もしかしたらごめんなさい)
と、とにかく、読めて良かったです。ありがとうございました。
ベル
(小瓶主)
む、むずかしい…。
自分で考えたはずなのに後から読み返してみると分かり辛い。
絶望的に分かり辛い。
この曜日計算、しばらく脳内で計算しないでいると、計算式結構忘れちゃうんですよ。
で、ひと月ごとの曜日のズレ幅、年ごとの曜日のズレ幅から、計算式を導き出すんですけど、まぁこの説明、本当に分かり辛いですね(笑)
久しぶりに曜日計算でもしてみようと思ったんですけど、計算式錆びついちゃってますね。
思い出したらまた書きます。
(もういい)
ベル
(小瓶主)
【小瓶主さんからお返事きたよ】
おはようございます。
前回は閏年の1、2月と3~12月ではxの値が異なるということについて語らせていただきました。
前回の投稿から2016年の1、2月は
x = 2 ± 7の倍数
2016年の3~12月は
x = 1 ± 7の倍数
であることが分かりました。
今回は西暦を28で割った余りと、xの関係について掘り下げて計算式②と③を導き出してみたいと思います。
今年の1月1日と12月31日の曜日を求めれば、前回ご紹介した方法で前年と来年のxを求めることができます。
それを繰り返すことによって計算式②と③を用いなくても28年間のxを求めることができます。
これからの説明のために28年間のxを書き並べてみます。
本文中で、cは西暦を28で割った余りなので、このcの値それぞれについてのxは次のようなります。
( c = 0 ) → 1、2月( x = 2 ) 3~12月( x = 1 )
( c = 1 ) → 1~12月( x = 7 )
( c = 2 ) → 1~12月( x = 6 )
( c = 3 ) → 1~12月( x = 5 )
( c = 4 ) → 1、2月( x = 4 ) 3~12月( x = 3 )
( c = 5 ) → 1~12月( x = 2 )
( c = 6 ) → 1~12月( x = 1 )
( c = 7 ) → 1~12月( x = 7 )
( c = 8 ) → 1、2月( x = 6 ) 3~12月( x = 5 )
( c = 9 ) → 1~12月( x = 4 )
( c = 10 ) → 1~12月( x = 3 )
( c = 11 ) → 1~12月( x = 2 )
( c = 12 ) → 1、2月( x = 1 ) 3~12月( x = 7 )
( c = 13 ) → 1~12月( x = 6 )
( c = 14 ) → 1~12月( x = 5 )
( c = 15 ) → 1~12月( x = 4 )
( c = 16 ) → 1、2月( x = 3 ) 3~12月( x = 2 )
( c = 17 ) → 1~12月( x = 1 )
( c = 18 ) → 1~12月( x = 7 )
( c = 19 ) → 1~12月( x = 6 )
( c = 20 ) → 1、2月( x = 5 ) 3~12月( x = 4 )
( c = 21 ) → 1~12月( x = 3 )
( c = 22 ) → 1~12月( x = 2 )
( c = 23 ) → 1~12月( x = 1 )
( c = 24 ) → 1、2月( x = 7 ) 3~12月( x = 6 )
( c = 25 ) → 1~12月( x = 5 )
( c = 26 ) → 1~12月( x = 4 )
( c = 27 ) → 1~12月( x = 3 )
とても長くなってしまいましたが曜日計算において、このリストは重要で、言うなればこれはcからxを求めるための早見表です。
僕が曜日計算を考案した当初はこのリストを丸暗記してましたが、リストを見てxを求めるならまだしも、丸暗記からxを求めると、どうしても時間がかかりますし時には間違えたりもします。
小中学校の頃の僕はこれをどうにかして計算で求められないか考えました。
xの値は1~7を繰り返しているので、閏年を度外視すれば単純にcを7で割った余りでxを求めることができます。
しかし、4年に一度閏年があり、2月29日を境に曜日が1日分ズレるのでそう単純には行きません。
4年に一度、1日分ズレるということは、cを4で割った商の分、曜日がズレるということです。
つまり、cを7で割った余りに、cを4で割った商を加えることで、閏年分のズレが求められることになります。
これが本文中の計算式②と③の中にある( a + b )の意味です。
このaとbの和を求めてしまえば、実際のxと、この( a + b )との差も分かります。
その差は閏年の1、2月のみ
2 ± 7の倍数
閏年の1、2月以外の場合は
1 ± 7の倍数
なので計算式②と③は次のようにも書き換えられます。
計算式②
x = ( 2 ± 7の倍数 ) - ( a + b )
計算式③
x = ( 1 ± 7の倍数 ) - ( a + b )
このようにして実際の暦から曜日計算のための計算式を導き出すことができます。
今回はこの辺で書くのを止めます。
ベル
(小瓶主)
【小瓶主さんからお返事きたよ】
前回は月、日、曜日が分かれば年間の曜日のズレ、xが求められるというお話でした。
今回はこのxについて語ってみたいと思います。
yは月毎の曜日のズレですが、このyの値は1年を365日、2月を28日までとして導き出したものです。
閏年の場合は2月は29日まであり、この閏日分の曜日のズレをxに上乗せすることで、暗記量を大幅に減らしています。
yのリストでは2月と3月と11月が同じ曜日になるということが示されていますが、2月と3月が同じ曜日になるのは2月を28日までとしているからです。
これが閏年の場合では、2月は29日までありますので、2月と3月は同じ曜日にはなりません。
閏日分の曜日のズレをxに上乗せしない場合は、閏年バージョンのyのリストも導き出さなければなりません。
これはかなり面倒で、暗記と暗算で曜日計算する場合、間違いやすくなってしまいます。
前回は月、日、曜日からxを求めましたが、閏年でない年なら、このxは1月から12月まで、どの日付を元に算出してもxの値は同じになります。
閏年の場合は、yに閏日分の曜日のズレを含ませていないので、その分のズレがxに上乗せされます。
つまり、閏年では1、2月と3~12月では算出されるxの値が異なります。
今年はちょうど閏年なので実際に確認してみましょう。
手順としては、3月1日の曜日を求め、そこからxを求めます。
3月1日の曜日が分かれば2月29日の曜日も分かるので、その2月29日の月日と曜日からxを求めます。
こうして算出された、それぞれのxを比較します。
今年の3月1日の曜日は実際にカレンダーを見た方が早いのですが、折角なので計算で求めてみます。
前回は7月27日(水)という日付からxを求めました。
こうして求めたxを使えば7月1日の曜日も計算できます。
前回の投稿より
x = 8
曜日 = x + y - z
なので7月1日は
曜日 = 8 + 2 - 1
曜日 = 9
ですが曜日は7日で同じ曜日になるので7で加減し
曜日 = 2
本文中の曜日の置き換えから
曜日 = 2 = 金曜日
今年の7月1日は金曜日ということになります。
ということは6月30日は木曜日なので前回の手順と同じように、この6月30日(木)からxを求めると
x = 1 になります。
7月27日(水)から求めたxは
x = 8 でした。
一見すると明らかにxの値は異なっていますが
xもyも曜日のズレを示した値なので7の倍数を加減しても算出される曜日に影響はありません。
今算出した二つのxの差も7の倍数なのでどちらのxを使っても結果は同じです。
こうして求めたxから6月1日は(水)と分かります。
ということは5月31日は(火)なので同じようにxを求めると
x = 1
長くなるので省略しますが、このように遡っていくと3月1日は(火)だと分かります。
お時間ある方は実際に計算してみてください。
ここまでのxは1±7の倍数になっているはずです。
問題はここからです。
これにより2月29日は(月)と分かるので、ここからxを求めます。
x = 曜日 + z - y
x = 6 + 29 - 5
x = 30
x = 2 ± 7の倍数
このようになりました。
3月まのでxは
x = 1 ± 7の倍数
でしたので閏年の2月ではyに含ませなかった閏日分の曜日のズレが、xに上乗せされていることがお分かりいただけたと思います。
余談ですが仮に今年を閏年でないとして2月28日を(月)としてxを求めると上記計算式から
x = 29
x = 1 ± 7の倍数
となり、閏年でない年なら2月も同じxになることが分かります。
思いの外、長くなったので続きはまた次回に語らせていただきます。
ベル
(小瓶主)
【小瓶主さんからお返事きたよ】
久しぶりに語りたいと思います。
今回はxの求め方についてです。
xを求める方法は2つあります。
1つは本文中の計算式②③を用いて求める方法。
もう1つは、月、日、曜日からxを求める方法です。
前者は西暦が分かっていれば求められますが、後者は西暦が分からなくても月、日、曜日が分かっていれば求められます。
曜日計算は複雑なようでいて実はシンプルで、その計算結果の答えは7通りしかありません。
つまり、日月火水木金土のいずれかでしかないということです。
ひと月経過すると曜日がどれくらいズレるかということは2通目のお返事で語らせていただきました。
今日は2016年7月27日(水)ですが、この日付からxを求めてみようと思います。
計算式②or③を用いる方法と、月、日、曜日から求める方法の二通りでxを求め、どの方法でも同じ答えになるかどうかを確認してみます。
まずは西暦からxを求める方法。
2016年7月なので、本文中の計算式③を用います。
西暦2016を28で割った余りから
c = 0
cを4で割った商から
a = 0
cを7で割った余りから
b = 0
ここで求められたa,bを計算式③に代入すると
x = 8
となり、これが西暦からxを求めた場合の答えです。
では月、日、曜日からxを求めてみます。
7月、27日、水曜日、水曜日は本文中の数値の置き換えから
水曜日 = 4です。
27日についてですが、このまま計算に用いても良いのですが、暗算しやすいように同じ水曜日である6日を計算に用います。
まずは日と曜日の数値を足し合わせます。
27日と同じ曜日である6日と水曜日の4から
6 + 4 = 10
この10から月毎の曜日のズレを引くと、年間の曜日のズレ、xが求められます。
月毎の曜日のズレは2通目のお返事のyのリストから
7月 → 2
これにより
10 - 2 = 8
西暦から求めたxと一致しますね。
xは計算式①で
x + y - z = 曜日
であることから
x = 曜日 + z - y
となり、月、日、曜日が分かればxが求められるということを示しています。
次回は計算式②と③の求め方について語ってみたいと思います。
ベル
(小瓶主)
【小瓶主さんからお返事きたよ】
近々語ってみようと思いますの近々が近すぎるというツッコミありがとうございます。
元々の記念日の曜日と同じ曜日になるのが何年後かということについて語ってみようと思います。
○月△日が記念日としてその一年後の同じ日。
閏年を考慮しなければ1年は365日なので365を7で割った余りは1。
つまり1年で1つ曜日がズレます。
4年に一度の閏年が存在しないものとすれば7年で同じ曜日になることになりますね。
しかし4年に一度、閏年となって2月29日という日が加わることによって閏年では1年366日という計算になります。
通常では一年に1つずつ曜日がズレるはずなのに閏年では2つ曜日がズレることになるということですね。
7年間の間に閏年が一度あれば同じ曜日になるまでの年数が一年短縮されるので6年後。
7年間の間に閏年が二度あれば二年短縮されるので5年後に同じ曜日になります。
5年後、あるいは6年後がちょうど閏年になる場合、○月△日が2月29日より前か後かによって、11年後でなければ同じ曜日にならない場合もあります。
ではその閏年の2月29日の場合、同じ曜日になるのは何年後になるのでしょう。
曜日は日月火水木金土の7通りあって、閏年は4年に一度、その閏年のみを見た場合、曜日が一巡するまでに4 × 7 = 28年かかることになります。
これは閏年を考慮に入れた計算なので閏年でない年でも28年後には確実に同じ曜日になります。
つまり誰であっても28歳の誕生日は生まれた時と同じ曜日になるということです。
本文中でcを求める時に西暦を28で割った余りを算出してますが、その理由がこれです。
西暦を28で割った余りを求める時、暗算で計算するのが大変と思われる方もいらっしゃるかもしれません。
そのような場合は1960,1988,2016などの28の倍数をあらかじめ覚えておけば、これらの28の倍数を引くことで簡単に余りが求められます。
あるいは1989年から平成になっているので1989年以降は「28で割った余り = 平成」と覚えておくのも便利です。
今回、度々語ってきた閏年ですが、基本的には4年に一度なのですが実際にはもっと複雑な決まりがあります。
・4で割りきれる年は閏年。
・でも100で割りきれる年は閏年ではない。
・でも400で割りきれる年は閏年。
このような後付け感ハンパない決まりがあります。
最も身近な例としては2000年が上記の決まりにより閏年となっています。
長くなってきたので今回はこの辺で書くのを止めます。
ベル
(小瓶主)
【小瓶主さんからお返事きたよ】
6通目の方へ
そう思っていただけてとても嬉しいです。
この曜日計算、ほんと楽しいんですよ。
この計算式を考案し始めたのは小中学校の頃なんですけど、当時はほぼ暗記頼みで曜日を求めるのに数分かかってました。
今は暗記を最小限にして計算も暗算でできるレベルに簡略化してるのですが、これをさらに進化させられた時はもうテンション上がりすぎますね。
この曜日計算、記念日をお祝いするのにも役立てられると思うんですよ。
月日だけではなく曜日も一致したら、より特別な気持ちでその日を過ごせるかもしれません。
あるいは記念日なんて毎年お祝いしてられないという方は「曜日まで一致しないと祝いたくないんだ」って言ってみるのもありだと思います。
もっと色々な楽しみ方があるかもしれませんね。
記念日と同じ曜日になるのは何年後かということについては、そんなに難しい話ではないので近々語ってみようと思います。
ななしさん
ポカーンとなっちゃうけど、なんか楽しそう。
ベル
(小瓶主)
【小瓶主さんからお返事きたよ】
3通目の方へ
お返事ありがとうございます。
そう言っていただけるととても嬉しいです。
実生活でこの芸を披露しても皆ポカーン顔になってしまうので投稿しようか迷っていたのですが投稿してみて良かったです。
月と日と曜日から西暦を逆算する超必殺究極奥義もあるのですが、曜日計算以上に説明が複雑になりそうなので、そのうち投稿してみようと思います。
4通目の方へ
プログラマではありませんが、プログラムを少し学んだことはあります。
その時に曜日計算プログラムを作ったことがあるのですが、仰る通りかなりハマりました。
ななしさん
プログラマですか??
もし違うなら、やってみたらハマりそう!
ななしさん
いみわからんけど、
めげずに、また書いて!
気が向いたらでいい。
なーんか、マニアはどこかにいる気はするんだよなぁ。
ベル
(小瓶主)
【小瓶主さんからお返事きたよ】
yは次のリストから数値を求めました。
1月、10月 → 1
4月、7月 → 2
9月、12月 → 3
6月 → 4
2月、3月、11月 → 5
8月 → 6
5月 → 7
これは同じ数値になる月は同じ曜日になることを示しています。
この数値も計算によって導き出せるのですが毎回計算で求めるのは面倒なので暗記できるよう、一覧にしました。
今回はその面倒な部分を語ってみます。
それぞれの月の数値をどのように求めたかということなのですが、これらは1月を「1」として、それを基準に求められています。
1月を「1」とすると1月1日は1通目のコメントより、日曜日となります。
2月1日の曜日は、1月の日数が31日であることから、3日分曜日がズレるので、水曜日ということになります。
この2月1日(水)を1通目のコメントの方法で数値化すると「5」になります。
2月を閏年かどうかであることを度外視して、28日までとすると、2月と3月が同じ曜日になることがわかります。
つまり3月も「5」
4月は3月が31日まであることから
5(前月の数値) - 3(前月の日数を7で割った余り) = 2
ということで4月は「2」
同様の計算方で
5月は「0」、ですが1~7の範囲に収まるよう7の倍数で調整すると「7」
5月は31日まであるので6月は「4」
12月まで、このように求めていったものがyのリストです。
次回はxの計算式の導き方について語ろうと思います。
ベル
(小瓶主)
【小瓶主さんからお返事きたよ】
需要がないかもしれませんが説明したくてウズウズしてるので語らせてください。
日曜を7とし、土曜まで降順で数値を割り当てましたが、この割り当てによって、より実用的な曜日計算が可能になります。
例えば今週で考えると、5日は日曜日。
この5日の5と日曜日の7を足すと12。
6日の6と月曜日の6を足すと12。
土曜日まで日にちと曜日を足すと12になります。
この12は曜日と日にちを足したものなので、12から日にちを引けば曜日が、曜日を引けば日にちを求めることができます。
次の週で考えると、日にちと曜日を足すと19。
さらに次の週で考えると26。
7ずつ増えているので、どれも7で割ると5余りますね。
この余りの5は今月の間はどの週からでも求めることができるので、逆に言えば、この余りの5を使えば今月の日にちや曜日を簡単に求めることができます。
例えば今月の土曜が何日か知りたい時は、土曜は1なので
5 - 1 = 4
というように4日だとわかります。
これで他の週の土曜日もわかりますね。
今月の25日が何曜日か知りたい時は
5 - 25 = - 20
この-20は曜日を示しているのですが、本文中の( )書きにあるように1~7の範囲に収まるように7の倍数を足したり引いたりして調整します。
21を足せば1~7の範囲に収まりますね。
- 20 + 21 = 1
この1は曜日を指し示していて、土曜日となります。
今月の25日は土曜日、正解ですね。
このように曜日を数値に置き換えるだけで、即席的な曜日計算が可能になります。
他の月についてはまた次回語りたいと思います。
以下はまだお返事がない小瓶です。
お返事をしていただけると小瓶主さんはとてもうれしいと思います。