院卒新人サラリーマンのメモ代わり

備忘としてのメモを記載

8queen問題

追記2
el = [1,2,3,4,5,6,7,8]
だとして
今の値±(リストのidxの差)だと斜めにいるとみなせるから
これをコードにしたらできそう

追記2終わり

追記
だめだ
よく理解してないからできないのだろう
他のサイトを参考に実装しよう
追記終わり


お気楽 OCaml プログラミング入門
を参考に8クイーン問題をocamlで解いてみる

方針
順列を作る
filtterで絞る


順列について
8×8ではなく数字がダブらなければ良いから8!
条件部はすべてがぶつからないを満たす
だからfilterとallとisSafeを組み合わせればいける

実装途中

/* lstの要素すべてがfを満たせばtrue*/
let rec all = (f, lst) =>
  switch (lst) {
  | [] => false
  | [x] => f(x)
  | [hd, ...rest] => f(hd) == true ? all(f, rest) : false
  };

/* 8queenのルールを書く */
let isSafe = el => {
  let func = () => false; /*ここを実装*/
  all(func, el);
};

/* 作成した順列を8queenの条件でフィルタリング */
let filterQueen = lst => List.filter(isSafe, lst);