21 lines
666 B
Plaintext
21 lines
666 B
Plaintext
(def nqueens (n (o queens))
|
|
(if (< len.queens n)
|
|
(let row (if queens (+ 1 queens.0.0) 0)
|
|
(each col (range 0 (- n 1))
|
|
(let new-queens (cons (list row col) queens)
|
|
(if (no conflicts.new-queens)
|
|
(nqueens n new-queens)))))
|
|
(prn queens)))
|
|
|
|
; check if the first queen in 'queens' lies on the same column or diagonal as
|
|
; any of the others
|
|
(def conflicts (queens)
|
|
(let (curr . rest) queens
|
|
(or (let curr-column curr.1
|
|
(some curr-column (map [_ 1] rest))) ; columns
|
|
(some [diagonal-match curr _] rest))))
|
|
|
|
(def diagonal-match (curr other)
|
|
(is (abs (- curr.0 other.0))
|
|
(abs (- curr.1 other.1))))
|