Skip to content

Instantly share code, notes, and snippets.

@fogus
Forked from laurentpetit/gist:1200343
Created September 7, 2011 14:00
Show Gist options
  • Save fogus/1200631 to your computer and use it in GitHub Desktop.
Save fogus/1200631 to your computer and use it in GitHub Desktop.
(defn neighbours [[x y]]
(for [dx [-1 0 1] dy (if (zero? dx) [-1 1] [-1 0 1])]
[(+ dx x) (+ dy y)]))
(defn step [cells]
(set (for [[loc n] (frequencies (mapcat neighbours cells))
:when (or (= n 3) (and (= n 2) (cells loc)))]
loc)))
(def board #{[2 1] [2 2] [2 3]})
(defn print-board [board w h]
(doseq [x (range (inc w)) y (range (inc h))]
(if (= y 0) (print "\n"))
(print (if (board [x y]) "[X]" " . "))))
(defn display-grids [grids w h]
(doseq [board grids]
(print-board board w h)
(print "\n")))
(display-grids (take 3 (iterate step board)) 5 5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment