朝日新聞2005年7月22日パズル横丁解答

プログラムの実行結果は以下の通り。

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;
}