指で数えて曜日を当てる方法

What day of the week is it? For calendar calculating like savant syndrome.

HOME > Archives > ReviveAlt

手順

西暦(グレゴリオ暦)1582年10月15日以降の曜日を知りたい日付に対して, その日付の年の下4桁をY(ただし下4桁が0のときはY=10000), 月をM, 日をDとする.下で1と3の場合にY年は平年. 2と4の場合にY年は閏年.

  1. Yが4で割り切れない.
  2. Yが4で割り切れて,かつ100で割り切れない.
  3. Yが100で割り切れて, かつ400で割り切れない.
  4. Yが400で割り切れる.

以下の手続きを実行して,最後に押さえている位置が0, 1, …, 6のとき,月, 火, …, 日が目的の曜日.

補足:
左手の人差し指, 中指, 薬指にある関節で区切られた位置のうち7つに次のような番号をつける. 人差し指先から0, 1, 2. 中指先から3, 4, 5. 薬指の先は6. 整数a,b, 0≤a<7, 0≤b<7について, 位置aのb後とは, 位置(a+b)%7を指す. ただし,整数c,d(d≠0)に対して, cをdで割った余りをc%dと書く.
詳しくは, n後 参照。

指で数えて曜日を当てる方法 ”ReviveAlt”:

Step 1
Mに対応する位置(Table 1)を押さえる.
Step 2
0後を押さえて, 1と数える.
Step 3
Dを超えない限り, 7ずつ足した数を数える. ただし, 数を数えるごとに, 押さえている位置は, 0後へ移動させる.
Step 4
Dを超えない限り, 1ずつ足した数を数える. ただし, 数を数えるごとに, 押さえている位置は, 1後へ移動させる.
Step 5
0後を押さえて, Y以下で最大の400で割ると1余る整数を数える.
Step 6
Yを超えない限り, 100ずつ足した数を数える. ただし, 数を数えるごとに, 押さえている位置は, 5後へ移動させる.
Step 7
Yを超えない限り, 20ずつ足した数を数える. ただし, 数を数えるごとに, 押さえている位置は, 4後へ移動させる.
Step 8
Yを超えない限り, 4ずつ足した数を数える. ただし, 数を数えるごとに, 押さえている位置は, 5後へ移動させる.
Step 9
Yを超えない限り, 1ずつ足した数を数える. ただし, 数を数えるごとに, 押さえている位置は, 1後へ移動させる.
Step 10
Y年が閏年で, かつ3≤Mの場合は, 押さえている位置を1後へ移動させる.

(手続き終わり)

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