From d9394b84b11b84ed5a5439a617e9aa4e4126637f Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Sat, 4 Dec 2021 19:54:16 -0500 Subject: [PATCH] day3: little more touch-up --- day3/part1.clj | 24 ++++++++++++------------ day3/part2.clj | 29 +++++++++-------------------- 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)))