Skip to content

Instantly share code, notes, and snippets.

@juergenhoetzel
Created October 18, 2010 21:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save juergenhoetzel/633108 to your computer and use it in GitHub Desktop.
Save juergenhoetzel/633108 to your computer and use it in GitHub Desktop.
Eight Queens Puzzle (SICP Exercise 2.42) Clojure solution using list comprehension
(ns sicp.queens)
(def empty-board '())
(defn safe?
"Check if queen in last row is safe"
[positions]
(let [[queen-pos & left] positions
k (count positions)
diags-up (map - left (range 1 (inc k)))
diags-down (map + left (range 1 (inc k)))]
(empty? (filter (partial = queen-pos) (concat diags-up diags-down left)))))
(defn queens [board-size]
((fn queen-cols [k]
(if (zero? k)
(list empty-board)
(for [rest-of-queens (queen-cols (dec k))
new-row (range 1 (inc board-size))
:let [new-cols (cons new-row rest-of-queens)]
:when (safe? new-cols)]
new-cols)))
board-size))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment