This puzzle is borrowed from   math-frolic.blogspot.



Given the following twelve statements, which of them are true?

 1.  This is a numbered list of twelve statements.
 2.  Exactly 3 of the last 6 statements are true.
 3.  Exactly 2 of the even-numbered statements are true.
 4.  If statement 5 is true, then statements 6 and 7 are both true.
 5.  The 3 preceding statements are all false.
 6.  Exactly 4 of the odd-numbered statements are true.
 7.  Either statement 2 or 3 is true, but not both.
 8.  If statement 7 is true, then 5 and 6 are both true.
 9.  Exactly 3 of the first 6 statements are true.
10.  The next two statements are both true.
11.  Exactly 1 of statements 7, 8 and 9 are true.
12.  Exactly 4 of the preceding statements are true.



Task

When you get tired of trying to figure it out in your head,
write a program to solve it, and print the correct answer or answers.



Extra credit

Print out a table of near misses, that is, solutions that are contradicted by only a single statement.




(use '[clojure.math.combinatorics]
 
(defn xor? [& args]
  (odd? (count (filter identity args))))
 
(defn twelve-statements []
  (for [[a b c d e f g h i j k l] (selections [true false] 12)
    :when (true? a)
    :when (if (= 3 (count (filter true? [g h i j k l]))) (true? b) (false? b))
    :when (if (= 2 (count (filter true? [b d f h j l]))) (true? c) (false? c))
    :when (if (or (false? e) (every? true? [e f g])) (true? d) (false? d))
    :when (if (every? false? [b c d]) (true? e) (false? e))
    :when (if (= 4 (count (filter true? [a c e g i k]))) (true? f) (false? f))
    :when (if (xor? (true? b) (true? c)) (true? g) (false? g))
    :when (if (or (false? g) (every? true? [e f g])) (true? h) (false? h))
    :when (if (= 3 (count (filter true? [a b c d e f]))) (true? i) (false? i))
    :when (if (every? true? [k l]) (true? j) (false? j))
    :when (if (= 1 (count (filter true? [g h i]))) (true? k) (false? k))
    :when (if (= 4 (count (filter true? [a b c d e f g h i j k]))) (true? l) (false? l))]
  [a b c d e f g h i j k l]))