魔法陣
魔法陣を解く。
魔法陣ではマスが9つで異なる数字を入れていく。
よって全パターンは9!
これをフィルターで削っていく。
この方針でやったところ9!を求めるとスタックオーバーフローが起こってしまった。
8!だと起こらなかった。
魔法陣の中央には必ず5が入るから、8!求めて中央に5を入れることにする。
コードが長くなったので雰囲気だけ
let test2 = permutation(8, [1, 2, 3, 4, 6, 7, 8, 9]) |> List.map(halveAppend5) |> List.filter(isCollect) |> print_board;
スタックオーバーフローが起きてくれたおかげで合成関数が理解できた。
リストの中央に5を入れるのは難しいけど、リストを半分に分けるのは簡単だし、2つのリストと5を合わせるのは簡単。
これらの組み合わせで実現できた。