packages feed

egison-4.1.0: sample/n-queens.egi

def fourQueens := matchAll [1,2,3,4] as multiset integer with
  | $a_1 ::
     (!#(a_1 - 1) & !#(a_1 + 1) & $a_2) ::
      (!#(a_1 - 2) & !#(a_1 + 2) & !#(a_2 - 1) & !#(a_2 + 1) & $a_3) ::
       (!#(a_1 - 3) & !#(a_1 + 3) & !#(a_2 - 2) & !#(a_2 + 2) & !#(a_3 - 1) & !#(a_3 + 1) & $a_4) ::
        []
   -> [a_1,a_2,a_3,a_4]

fourQueens -- [[2,4,1,3],[3,1,4,2]]

def nQueens n := matchAll [1..n] as multiset integer with
  | $a_1 ::
      (loop $i (2, n)
         ((loop $j (1, i - 1)
             (!#(a_j - (i - j)) & !#(a_j + (i - j)) & ...)
             $a_i) :: ...)
         [])
  -> map (\i -> a_i) [1..n]

nQueens 4 -- [[2,4,1,3],[3,1,4,2]]

def fourQueens2 := matchAll [1,2,3,4] as multiset integer with
  | $a_1 ::
     (!#(a_1 - 1) & !#(a_1 + 1) & $a_2) ::
      (!#(a_1 - 2) & !#(a_1 + 2) & !#(a_2 - 1) & !#(a_2 + 1) & $a_3) ::
       (!#(a_1 - 3) & !#(a_1 + 3) & !#(a_2 - 2) & !#(a_2 + 2) & !#(a_3 - 1) & !#(a_3 + 1) & $a_4) ::
        []
   -> a

fourQueens2