aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--day3/part1.clj24
-rw-r--r--day3/part2.clj29
2 files changed, 21 insertions, 32 deletions
diff --git a/day3/part1.clj b/day3/part1.clj
index 915ee47..3fe888e 100644
--- a/day3/part1.clj
+++ b/day3/part1.clj
@@ -1,17 +1,16 @@
(require '[clojure.string :as str])
-(println
- (->> "./in"
- (slurp)
- (str/split-lines)
- (map (fn [l] (map #(if (= % \1) 1 0) l)))
- (apply (partial map +))
- (map #(if (< % 500) \1 \0))
- (str/join)
- (#(Integer/parseInt % 2))
- (#(* % (bit-xor % (dec (int (Math/pow 2 12))))))
- )
- )
+(->> "./in"
+ (slurp)
+ (str/split-lines)
+ (map (fn [l] (map #(if (= % \1) 1 0) l)))
+ (apply (partial map +))
+ (map #(if (< % 500) \1 \0))
+ (str/join)
+ (#(Integer/parseInt % 2))
+ (#(* % (bit-xor % (dec (int (Math/pow 2 12))))))
+ (println)
+ )
; (->> input data file name
; read in entire contents
@@ -22,4 +21,5 @@
; join characters into single string
; convert binary string to a number (gamma)
; multiply gamma by its bit-inverse (bit length hard-coded)
+; print results
diff --git a/day3/part2.clj b/day3/part2.clj
index cbbe35f..00e656f 100644
--- a/day3/part2.clj
+++ b/day3/part2.clj
@@ -1,13 +1,12 @@
+(require '[clojure.string :as str])
+
(def bitcount 12)
(def input
- (loop [tot []]
- (let [line (read-line)]
- (if (empty? line)
- tot
- (recur (conj tot (Integer/parseInt line 2)))
- )
+ (->> "./in"
+ (slurp)
+ (str/split-lines)
+ (map #(Integer/parseInt % 2))
)
- )
)
(defn countbit [lst bit]
@@ -16,27 +15,17 @@
(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
- )
- )
- )
- )
+ (filter #(= (bit-test % bit) v) lst)
)
)
(loop [bit (dec bitcount) lst0 input lst1 input]
(if (and (= 1 (count lst0)) (= 1 (count lst1)))
- (println (* (first lst0) (first lst1)))
+ (println (map * lst0 lst1))
(recur
(dec bit)
(filterbit lst0 bit (>= (countbit lst0 bit) (/ (count lst0) 2)))