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

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

HOME > Archives > Light

手順

西暦(グレゴリオ暦)1582年10月15日以降の曜日を知りたい日付に対して, その日付の年の下4桁をY, 月をM, 日をDとする.

M < 3の場合は,Y’ = Y - 1(ただし,Y = 0のときはY’ = 9999),M’ = M + 12とする. M ≥ 3の場合は,Y’ = Y, M’ = Mとする.

以下の手続きを実行して,最後に押さえている位置が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後 参照。

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

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

(手続き終わり)

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