高速演算法:Y2MとM2Y

スピードカレンダーにおいて1月と2月の処理は計算スピードに大きく影響を与えるファクターである。ここでは(1)下二桁値→月値の順で計算するY2M法と(2)月値→下二桁値の順で計算するM2Y法の二つを紹介する。

Y2M法

この手法は下二桁値を導出した後に月値を得る。例えば、2022年7月の場合の計算過程は

①20→上二桁値「0」
②22→下二桁値「6」
③7→月値「5」

となる。ここで問題となってくるのは1月及び2月の場合である。この場合年の値を一つ減じなければならない。しかし1月又は2月であることを確認した後に再度下二桁値を再計算することは効率的ではない。そこで年数が4の倍数か否かを確認する。

  • 1月の場合かつ年数が4の倍数でない場合、既に計算している年値+下二桁値から1減じる
  • 1月の場合かつ年数が4の倍数の場合、既に計算している年値+下二桁値から2減じる
  • 2月の場合かつ年数が4の倍数でない場合、既に計算している年値+下二桁値に2加算する
  • 2月の場合かつ年数が4の倍数の場合、既に計算している年値+下二桁値に1加算する

またミレニアムの場合(下二桁が00の場合)の処理も同様に処理するが、年が400の倍数の時は更に1減じる。結果として以下の表のようになる。

上二桁 1月 2月
16, 20, 24 5 1
15, 19, 23 0 3
18, 22 2 5
17, 21, 25 4 0

Y2Dの良いところは、日本の表記法(ビックエンディアン、年月日)とあっているため、日本語で日付について聞かれた場合に即座に計算できる。一方で英国や豪州などの表記法(リトルエンディアン、日月年)や米国の表記法(ミドルエンディアン、月日年)とは合っていない。

M2Y法

下二桁値を計算する前に月を確認する方法である。つまり月数を算出したのちに、1月か2月であった場合に年数から1減じた下二桁に基づいて下二桁値を決定する。

M2Y法の良いところは、Y2M法と異なり4の倍数か否かの判定は必要ない。またリトルエンディアンとミドルエンディアンの表記法と親和性が良い。一方で日本の表記法とあっていないことから、口頭での対応に窮することがある。

Y2MかM2Yか

いずれの表記法にも対応できるようにY2MとM2Yの両方を習得することが望ましいが、まずは覚えることが少ないM2Yからスタートし、下二桁値の導出に慣れてきたらY2Mに移行されるのが王道かと思われます。

 

Comments

Copied title and URL