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

備忘としてのメモを記載

魔法陣

お気楽 OCaml プログラミング入門

魔法陣を解く。
魔法陣ではマスが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を合わせるのは簡単。
これらの組み合わせで実現できた。