add day3
parent
09e1c2712b
commit
897410ff81
@ -0,0 +1,33 @@
|
||||
(def counts
|
||||
(loop [line (read-line)
|
||||
tot (repeat (count line) 0)
|
||||
]
|
||||
(if (empty? line)
|
||||
tot
|
||||
(recur
|
||||
(read-line)
|
||||
(map + tot (map #(if (= % \1) 1 0) line))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(println counts)
|
||||
|
||||
(loop [cnts counts gamma 0 epsilon 0]
|
||||
(if (empty? cnts)
|
||||
(println (* gamma epsilon))
|
||||
(recur
|
||||
(rest cnts)
|
||||
(if (> (first cnts) 500)
|
||||
(inc (* 2 gamma))
|
||||
(* 2 gamma)
|
||||
)
|
||||
(if (< (first cnts) 500)
|
||||
(inc (* 2 epsilon))
|
||||
(* 2 epsilon)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
@ -0,0 +1,47 @@
|
||||
(def bitcount 12)
|
||||
(def input
|
||||
(loop [tot []]
|
||||
(let [line (read-line)]
|
||||
(if (empty? line)
|
||||
tot
|
||||
(recur (conj tot (Integer/parseInt line 2)))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defn countbit [lst bit]
|
||||
(->> lst
|
||||
(map #(if (bit-test % bit) 1 0))
|
||||
(apply +)
|
||||
)
|
||||
)
|
||||
(defn filterbit [lst bit v]
|
||||
(if (= 1 (count lst))
|
||||
lst
|
||||
(loop [l lst r []]
|
||||
(if (empty? l)
|
||||
r
|
||||
(recur
|
||||
(rest l)
|
||||
(if (= (bit-test (first l) bit) v)
|
||||
(conj r (first l))
|
||||
r
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(loop [bit (dec bitcount) lst0 input lst1 input]
|
||||
(if (and (= 1 (count lst0)) (= 1 (count lst1)))
|
||||
(println (* (first lst0) (first lst1)))
|
||||
(recur
|
||||
(dec bit)
|
||||
(filterbit lst0 bit (>= (countbit lst0 bit) (/ (count lst0) 2)))
|
||||
(filterbit lst1 bit (< (countbit lst1 bit) (/ (count lst1) 2)))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
Loading…
Reference in New Issue