From b2d8d90014bb28ccdb4eef0fd9b34ad74237b76c Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Mon, 13 Dec 2021 12:09:40 -0500 Subject: [PATCH] day13: print-grid, add partboth.clj --- day13/partboth.clj | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 day13/partboth.clj diff --git a/day13/partboth.clj b/day13/partboth.clj new file mode 100644 index 0000000..c24980d --- /dev/null +++ b/day13/partboth.clj @@ -0,0 +1,49 @@ +(require '[clojure.string :as str]) + +(def input (->> (slurp "./in") + (str/split-lines) + (split-with not-empty) + ((juxt + (fn [lst] + (reduce + #(conj %1 (mapv read-string (str/split %2 #","))) + #{} (first lst))) + (fn [lst] + (->> (second lst) + (drop 1) + (map #(-> % + (str/split #"=") + (update 0 (comp {\x 0 \y 1} last)) + (update 1 read-string))) + )))))) + +(defn fold-point [idx chg pt] + (cond-> pt (> (get pt idx) chg) (update idx #(- % (* 2 (- % chg)))))) + +(defn print-grid [pts] + (let [xmax (inc (apply max (map first pts))) + ymax (inc (apply max (map second pts)))] + (doseq [y (range 0 ymax)] + (println + (str/join + (for [x (range 0 xmax)] (if (contains? pts [x y]) \@ \ )) + ))))) + +; Part 1 +(let [instruction (first (second input))] + (->> (first input) + (map (partial fold-point (first instruction) (second instruction))) + (distinct) + (count) + (println))) + +; Part 2 +(print-grid + (apply + (partial + reduce + #(let [ins (first %2)] + (set (map (partial fold-point (first %2) (second %2)) %1)))) + input + )) +