朝日新聞2004年12月4日のパズルパーク問題

問題

以下の2桁のデジタル数字をある規則に従って処理すると99になる。

以下の5桁の数字4つを処理するとどうなるか?

解答への道(ヒント)

8+5+6=9

おー,

2+4+5=11

うーん。

しかし,プログラマは直ぐにXORが頭に浮かぶんだな。

やってみたらビンゴ。

後は5桁の数字の処理を手でやるかプログラムでやるかということ。

プログラマだからプログラムを作ってやるか。

プログラムのメイン部分は以下のような感じになる。

int main( int argc, cstring argv[])
{
  a5 r = n2b( "35742");
  r = xor( r, n2b( "4891 "));
  r = xor( r, n2b( "75 05"));
  r = xor( r, n2b( "61043"));
  pr(r);
  return    0;
}

a5は以下のように定義する。

typedef struct struct_a5 { byte v[5];} a5;

byteで各数字のビット情報を7桁で記録,[5]は5桁の数字を意味する。

n2b( )は数字列をデジタル数字のビットデータに変換し,xor( )はそのXORを計算し,pr( )で出力する。

手でやった方が速かったかなー。

しかもプログラムがあっているかどうか結局手で全て検証することになってしまった。

解速度