クイズ大陸



履歴 検索 最新 出題

No. 4≫ No.5 ≫No. 6
?ゲーデル 2010/03/09 10:37
【補足】
脳内疑似コードでプログラミングチックに書くと、次のような計算になります。
-------------------------------------------------
<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
□□□
□□
□■
�H�Gで+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
�H�Gで+0で、m=2 なので、+6
□■□
□□
□□
→木曜日!
</tt>
編集