【補足】
脳内疑似コードでプログラミングチックに書くと、次のような計算になります。
-------------------------------------------------
<tt>x = X[m-1]; //@
t = d % 7;
x = (x + t) % 7;//A
if (cc == 19)
{
x = (x + 1) % 7;
}//B
while (40 <= yy)
{
yy -= 40;
x = (x + 1) % 7;
}//C
while (20 <= yy)
{
yy -= 20;
x = (x + 4) % 7;
}//D
while (8 <= yy)
{
yy -= 8;
x = (x + 3) % 7;
}//E
while (4 <= yy)
{
yy -= 4;
x = (x + 5) % 7;
}//F
x = (x + yy) % 7;//G
if (yy == 0 && (m == 1 || m == 2))
{
x = (x + 6) % 7;
}//H</tt>
-------------------------------------------------
x = (x + y) % 7 を計算の基本に置いていることが良く分かると思います。
平均的には、1回の曜日計算につき、5回くらいこの計算をやります。
あとは %7 の計算を1回、簡単な引き算を3回くらいです。
目標タイムとしては、
@〜Bを2.5秒、C〜Hを2.5秒くらいかと思います。
なれれば 3〜4 秒くらいでできます。
<tt>
例1:2010年2月27日の場合
@2月なので、
□□□
■□
□□
A27%7=6 なので、+6
■□□
□□
□□
B20なので、スキップ
Cスキップ
Dスキップ
E10-8=2 として、+3
□■□
□□
□□
Fスキップ
G+2
□□□
□□
□■
HGで+2なのでスキップ
→土曜日!
例2:1992年2月27日の場合
@2月なので、
□□□
■□
□□
A27%7=6 なので、+6
■□□
□□
□□
B19なので、+1
□□□
■□
□□
C92-40-40=12 として、+1 を2回
□■□
□□
□□
Dスキップ
E12-8=4 として、+3
□□■
□□
□□
F4-4=0 として、+5
□□□
□■
□□
G+0
HGで+0で、m=2 なので、+6
□■□
□□
□□
→木曜日!
</tt>
ゲーデル 2010/03/09 10:37
脳内疑似コードでプログラミングチックに書くと、次のような計算になります。
-------------------------------------------------
-------------------------------------------------
x = (x + y) % 7 を計算の基本に置いていることが良く分かると思います。
平均的には、1回の曜日計算につき、5回くらいこの計算をやります。
あとは %7 の計算を1回、簡単な引き算を3回くらいです。
目標タイムとしては、
@〜Bを2.5秒、C〜Hを2.5秒くらいかと思います。
なれれば 3〜4 秒くらいでできます。
<tt>
</tt>