Skip to content

Instantly share code, notes, and snippets.

@halcat0x15a
Created July 2, 2012 04:54
Show Gist options
  • Select an option

  • Save halcat0x15a/3031170 to your computer and use it in GitHub Desktop.

Select an option

Save halcat0x15a/3031170 to your computer and use it in GitHub Desktop.
Sudoku solver
(use 'clojure.core.logic)
(def _1 [()])
(def _2 [() ()])
(def _3 [() () ()])
(def _4 [() () () ()])
(defne different [list]
([()])
([[x . ()]])
([[h . t]]
(condu [(membero h t) u#]
[(different t)])))
(defne lte [m n]
([() _])
([[_ . x] [_ . y]]
(lte x y)))
(defne gte [m n]
([_ ()])
([[_ . x] [_ . y]]
(gte x y)))
(defne bounds [l m n]
([() _ _])
([[h . t] m n]
(lte m h)
(gte n h)
(bounds t m n)))
(defnu sudoku [puzzle]
([[s11 s12 s13 s14
s21 s22 s23 s24
s31 s32 s33 s34
s41 s42 s43 s44]]
(bounds [s11 s12 s13 s14
s21 s22 s23 s24
s31 s32 s33 s34
s41 s42 s43 s44] _1 _4)
(different [s11 s12 s13 s14])
(different [s21 s22 s23 s24])
(different [s31 s32 s33 s34])
(different [s41 s42 s43 s44])
(different [s11 s21 s31 s41])
(different [s12 s22 s32 s42])
(different [s13 s23 s33 s43])
(different [s14 s24 s34 s44])
(different [s11 s12 s21 s22])
(different [s13 s14 s23 s24])
(different [s31 s32 s41 s42])
(different [s33 s34 s43 s44])))
(run* [q] (sudoku [q _1 _2 _4 _4 _2 _3 _1 _1 _3 _4 _2 _2 _4 _1 _3]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment