朝日新聞2006年2月17日のパズル横丁問題

問題

4x4のマトリックス上に1〜4のトランプ16枚を配置する。配置する時の制約は以下の通り。

ハートの1はどこに配置されるか?

解答への道(ヒント)

制約に沿って置けないカードを絞り込んだら,最初に置いた以外のカードも自動的に配置できるようになるかな?

と思ってプログラミング。

int type_mask[] = { 0x000F, 0x00F0, 0x0F00, 0xF000};
#define D       0               // ダイヤ
#define H       1               // ハート
#define S       2               // スペード
#define C       3               // クラブ
int no_mask[] = { 1, 2, 4, 8};
#define N1      0               // 1
#define N2      1               // 2
#define N3      2               // 3
#define N4      3               // 4
const int M = 4;
int m[M][M];

int main( int argc, cstring argv[])
{
  int irow, icol;
  for( irow=0; irow< M; irow++) {
    for( icol=0; icol< M; icol++) {
      m[irow][icol] = 0xFFFF;   // 全てのカードを配置できる可能性がある。
    }
  }
  decide( 0, 0, S, N1);         // [0,0]にスペードの1を配置
  decide( 0, 3, D, N2);         // [0,3]にダイヤの2を配置
  decide( 2, 2, C, N2);         // [2,2]にクラブの2を配置
  decide( 3, 0, C, N3);         // [3,0]にクラブの3を配置
  for( irow=0; irow< M; irow++) {
    for( icol=0; icol< M; icol++) {
      ps( "%04x ", m[irow][icol]);
    }
    ps( "\n");
  }
  return    0;
}

decide()はそこにカードを配置することにより他の位置の可能性を排除する関数。

プログラムを実行すると以下のような結果になり,最初に置いた以外の位置のカードが一つも決定していない。

0100 c0c0 00c0 0002 
00aa 00cc 0990 ddd0 
0088 0990 2000 0dd0 
4000 0bbb 0999 0080 

ありゃ,やっぱり探索しないとダメか。

ということで,探索するようにプログラムを修正。

答えは1件出力されました。

最近はを「みつば」って言わないのか?「クラブ」派絶対多数か。

以前「みつば」って言って誰かに笑われた経験がある。

 

先日姪が携帯メールを見せてくれたとき,「は」を「わ」で打っていた。

気にならないのか?

メールといえばホリエモンメールで民主党が大騒ぎ。

とうとうメールを公開したと思ったらヘッダ情報はX-MailerとX-Senderだけって…

しかも黒塗り。笑えるなー。

Subjectも「至急」だけって。そんな社会人いるのか?

 

これってどうやって幕引きするんだろう?

他人事ながら心配してしまうよ。

大丈夫か民主党。

解速度