8-Queen
https://gyazo.com/942a93103f9ead8908fb3a49800ce68b.png
code:8queen.js
function setup(){
col = [];
qpos = [];
up = {};
down = {};
nqueens = 8;
var i;
for(i=0;i<nqueens;i++){
}
for(i= -nqueens;i<nqueens;i++){
}
expand(0);
}
function output(){
var i;
var s = '';
for(i=0;i<nqueens;i++){
}
console.log(s);
}
function expand(n){
for(var c=0;c<nqueens;c++){
if(n+1 >= nqueens){
output();
}
else {
expand(n+1);
}
}
}
}
Generatorの使い方がおかしくて動かない
code:8queen2.js
function setup(){
col = [];
qpos = [];
up = {};
down = {};
nqueens = 8;
var i;
for(i=0;i<nqueens;i++){
}
for(i= -nqueens;i<nqueens;i++){
}
gen = expand(0);
}
function mouseClicked(){ // クリックすると次々と値を表示する
background('#ff8')
//clear()
value = gen.next().value
text(value.join(' '), 30, 40)
}
function* expand(n){
for(var c=0;c<nqueens;c++){
if(n+1 >= nqueens){
yield qpos; // これは無理か?
}
else {
expand(n+1);
}
}
}
}
code:ruby
#
# Generate and Testで8-Queenを解く
#
(0..7).to_a.permutation { |a|
h = {}
collision = false
(0..7).each { |x|
break if collision
}
next if collision
h = {}
collision = false
(0..7).each { |x|
break if collision
}
next if collision
puts a.join('-')
}
再帰を使うのが一般的だと思うがこの程度なら力技でも大丈夫なようだ 解を生成するプログラムと表示するプログラムを別プロセスにしたい