『【プログラム クイズ】 アインシュタインのなぞなぞ (Einstein's Riddle)』のプログラムをJavaScriptに翻訳してみました。(^_^;
●Einstein.html
<!-- /* * Einstein.html * # : 12345 * N : NDEGS * H : YBRGW * P : CHBFD * D : WTMCB * T : DMPRB */ //--> <html> <head> <title>Einstein.html</title> <script type="text/javascript" src="genperm.js">/* 順列生成 */</script> <script type="text/javascript"> // xがaの何番目にあるか調べる関数 // ないときは、-1を返して、あるときは、0〜a.length-1を返す function get_pos(a, x) { for(var i=0; i<a.length; i++) if(a[i]==x) return(i); return(-1); } // マッチング条件 function check_match(a, x, b, y) { var n=get_pos(a,x); if(n<0||4<n) return(false); if(b[n]==y) return(true ); else return(false); } // 順序付き隣接条件(左からx,yの順で隣接) function check_adj_1(a, x, b, y) { var n=get_pos(a,x); if(n<0||3<n) return(false); if(b[n+1]==y) return(true ); else return(false); } // 隣接条件(順不定) function check_adj_2(a, x, b, y) { return(check_adj_1(a,x,b,y)||check_adj_1(b,y,a,x)); } var PLACE =["1","2","3","4","5"]; // 固定 var NATION=["D","E","G","N","S"]; // 要素を昇順にソートしたもの var HOUSE =["B","G","R","W","Y"]; // 以下同様 var PET =["B","C","D","F","H"]; var DRINK =["B","C","M","T","W"]; var TABACO=["B","D","M","P","R"]; var Nation={ // 連想配列 "D": "D:デンマーク", "E": "E:イギリス", "G": "G:ドイツ", "N": "N:ノルウェー", "S": "S:スウェーデン" }; </script> </head> <body> <script type="text/javascript"> var place =new Array(5); // 場所(固定) var nation=new Array(5); // 国、国籍 var house =new Array(5); // 家 var pet =new Array(5); // ペット var drink =new Array(5); // 飲み物 var tabaco=new Array(5); // タバコ(ポルトガル語) var tm=(new Date()).getTime(); // Timer start place=PLACE.slice(0); nation=NATION.slice(0); do{ // nation loop if(!check_match(nation,'N',place, '1')) continue; // 条件09 house=HOUSE.slice(0); do{ // house loop if(!check_match(nation,'E',house, 'R')) continue; // 条件01 if(!check_adj_1(house, 'G',house, 'W')) continue; // 条件04 if(!check_adj_2(nation,'N',house, 'B')) continue; // 条件14 pet=PET.slice(0); do{ // pet loop if(!check_match(nation,'S',pet, 'D')) continue; // 条件02 drink=DRINK.slice(0); do{ // drink loop if(!check_match(nation,'D',drink, 'T')) continue; // 条件03 if(!check_match(house, 'G',drink, 'C')) continue; // 条件05 if(!check_match(place, '3',drink, 'M')) continue; // 条件08 tabaco=TABACO.slice(0); do{ // tabaco loop if(!check_match(tabaco,'P',pet, 'B')) continue; // 条件06 if(!check_match(house, 'Y',tabaco,'D')) continue; // 条件07 if(!check_adj_2(tabaco,'M',pet, 'C')) continue; // 条件10 if(!check_adj_2(pet, 'H',tabaco,'D')) continue; // 条件11 if(!check_match(tabaco,'B',drink, 'B')) continue; // 条件12 if(!check_match(nation,'G',tabaco,'R')) continue; // 条件13 if(!check_adj_2(tabaco,'M',drink, 'W')) continue; // 条件15 //チェックを潜り抜けたものだけを表示 document.write("<pre>"); document.write("#:", place .join(""),"<br />"); document.write("N:", nation.join(""),"<br />"); document.write("H:", house .join(""),"<br />"); document.write("P:", pet .join(""),"<br />"); document.write("D:", drink .join(""),"<br />"); document.write("T:", tabaco.join(""),"<br />"); document.write("</pre>"); //document.write("<br />"); document.write("∴",Nation[nation[get_pos(pet,'F')]],"人<br />"); }while(next_perm(tabaco,5,5)); }while(next_perm(drink,5,5)); }while(next_perm(pet,5,5)); }while(next_perm(house,5,5)); }while(next_perm(nation,5,5)); tm=(new Date()).getTime()-tm; // Timer stop document.write("Runtime : ",tm/1000.0, "[sec]<br />"); </script> </body> </html>
●実行結果
#:12345 N:NDEGS H:YBRGW P:CHBFD D:WTMCB T:DMPRB ∴G:ドイツ人 Runtime : 0.039[sec]
※genperm.js
http://d.hatena.ne.jp/rsc96074/20111021/1319190871
●ゼロからわかる JavaScript超入門 [大型本] 河西 朝雄 (著)
- 作者: 河西朝雄
- 出版社/メーカー: 技術評論社
- 発売日: 2010/01/08
- メディア: 大型本
- 購入: 1人 クリック: 14回
- この商品を含むブログ (12件) を見る
- 作者: クロノス・クラウン,柳井政和
- 出版社/メーカー: 秀和システム
- 発売日: 2010/10/26
- メディア: 単行本
- 購入: 3人 クリック: 122回
- この商品を含むブログ (10件) を見る
- 作者: アンク
- 出版社/メーカー: 翔泳社
- 発売日: 2007/09/13
- メディア: 大型本
- 購入: 3人 クリック: 38回
- この商品を含むブログ (10件) を見る
パーフェクトJavaScript (PERFECT SERIES 4)
- 作者: 井上誠一郎,土江拓郎,浜辺将太
- 出版社/メーカー: 技術評論社
- 発売日: 2011/09/23
- メディア: 大型本
- 購入: 24人 クリック: 588回
- この商品を含むブログ (12件) を見る
- 作者: David Flanagan,村上列
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/08/14
- メディア: 大型本
- 購入: 52人 クリック: 1,011回
- この商品を含むブログ (271件) を見る
- 作者: 古籏一浩
- 出版社/メーカー: 技術評論社
- 発売日: 2011/09/08
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 32回
- この商品を含むブログ (6件) を見る
Head First JavaScript ―頭とからだで覚えるJavaScriptの基本
- 作者: Michael Morrison,豊福剛
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/08/14
- メディア: 大型本
- 購入: 15人 クリック: 328回
- この商品を含むブログ (59件) を見る
- 作者: 大津真
- 出版社/メーカー: オーム社
- 発売日: 2006/09/23
- メディア: 大型本
- 購入: 1人 クリック: 75回
- この商品を含むブログ (20件) を見る
- 作者: 大藤幹,半場方人
- 出版社/メーカー: 秀和システム
- 発売日: 2009/06/11
- メディア: 単行本
- 購入: 5人 クリック: 133回
- この商品を含むブログ (2件) を見る