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も「至急」だけって。そんな社会人いるのか?
これってどうやって幕引きするんだろう?
他人事ながら心配してしまうよ。
大丈夫か民主党。
解速度
即