指カレンダーの使い方 2/2

説明

2002年、筆者は指カレンダーの毎年基準日の曜日を調べておく必要があるという弱点を克服、性能を飛躍的に向上させた。それ以降も様々な形を試行錯誤してきたが、その中でもこれは"月の位置"やら"ルート1,4,5"なるものを導入し、記憶依存度を最大限減らしたもの。最悪"ルート4"も削ることができるが、それではカウント回数が増えすぎて実用的ではないと判断した。

準備

日付について

曜日を知りたいグレゴリオ暦の0年3月1日以降の任意の日付に対して, 年の下4桁をY,月をM,日をDとする. M<3の場合は, Y'=Y-1(ただし, Y=0のときはY'=9999), M'=M+12, M≥3の場合はY'=Y, M'=Mとする.

使う部分

左手の人差し指, 中指, 薬指にある関節で区切られた位置のうち7つを親指で押さえて数える。各位置には番号が付けられており, それぞれ人差し指の先から0, 1, 2, 中指の先から3, 4, 5, 薬指の先が6.
f:id:suzuki-kentaro:20160315140807j:plain

月の位置

3,4,5,...,14に対して, 指の位置0,3,5,1,3,6,2,4,0,2,5,1を月の位置と呼ぶ.
f:id:suzuki-kentaro:20160315140825j:plain

ルート1

指の位置について, 0,1,2,...,6,0,1,2,...という順番をルート1と呼ぶ.
f:id:suzuki-kentaro:20160315140836j:plain

ルート4

指の位置について, 0,4,1,5,2,6,3,0,4,1,...という順番をルート4と呼ぶ.
f:id:suzuki-kentaro:20160315140849j:plain

ルート5

指の位置について, 0,5,3,1,6,4,2,0,5,3,...という順番をルート5と呼ぶ.
f:id:suzuki-kentaro:20160315140901j:plain

答えの曜日

手順を実行して最後に押さえている位置が0,1,2,...,6のとき, 目的の曜日は水,木,金,...,火.
f:id:suzuki-kentaro:20160315140915j:plain

手順

(図は3855年7月20日の場合)

Step1.

対応する月の位置を押さえながら, 3,4,5,...,M'と数える.
f:id:suzuki-kentaro:20160315140927j:plain

Step2.

押さえている位置を移動せずに, 1と数える.
f:id:suzuki-kentaro:20160315140937j:plain

Step3.

Dを超えない限り, 7ずつ足した数を数える. ただし押さえている位置は移動させない.
f:id:suzuki-kentaro:20160315140950j:plain

Step4.

Dを超えない限り, 1ずつ足した数を数える. ただし数を数えるごとに押さえている位置はルート1に従って移動させる.
f:id:suzuki-kentaro:20160315140959j:plain

Step5.

押さえている位置を移動せずに, Y'以下で最大の400の倍数を数える.
f:id:suzuki-kentaro:20160315141010j:plain

Step6.

Y'を超えない限り, 100ずつ足した数を数える. ただし数を数えるごとに押さえている位置はルート5に従って移動させる.
f:id:suzuki-kentaro:20160315141020j:plain

Step7.

Y'を超えない限り, 20ずつ足した数を数える. ただし数を数えるごとに押さえている位置はルート4に従って移動させる.
f:id:suzuki-kentaro:20160315141029j:plain

Step8.

Y'を超えない限り, 4ずつ足した数を数える. ただし数を数えるごとに押さえている位置はルート5に従って移動させる.
f:id:suzuki-kentaro:20160315141041j:plain

Step9.

Y'を超えない限り, 1ずつ足した数を数える. ただし数を数えるごとに押さえている位置はルート1に従って移動させる.
f:id:suzuki-kentaro:20160315141051j:plain
(答えは金曜日)