プログラムの実行結果は以下の通り。
22時11分33秒(22時から693秒後)から3秒間
プログラムのソースは以下の通り。
#include "puzutl.h"
int main( int argc, cstring argv[])
{
char a[1000+100], b[1000+100], c[1000+100];
int p, i;
for( p=0; p< 1000; ) {
for( i=0; i< 3; i++) a[p++] = 0; // 3秒消灯
for( i=0; i< 4; i++) a[p++] = 1; // 4秒点灯
}
for( p=0; p< 1000; ) {
for( i=0; i< 3; i++) b[p++] = 0; // 3秒消灯
for( i=0; i< 6; i++) b[p++] = 1; // 6秒点灯
}
for( p=0; p< 1000; ) {
for( i=0; i< 3; i++) c[p++] = 0; // 3秒消灯
for( i=0; i< 8; i++) c[p++] = 1; // 8秒点灯
}
for( p=3; p< 1000; p++) { // 最初A,B,Cの3つとも消灯だったので3秒後から探す
if( a[p+0] == 0 && b[p+0] == 0 && c[p+0] == 0 && // 同時に3秒消灯になるか?
a[p+1] == 0 && b[p+1] == 0 && c[p+1] == 0 &&
a[p+2] == 0 && b[p+2] == 0 && c[p+2] == 0 ) {
int h = p/3600 + 22;
int m = p/60;
int s = p%60;
ps( "%d時%d分%d秒(22時から%d秒後)から3秒間\n", h, m, s, p);
break;
}
}
return 0;
}