From adfc073ed1942fdc80183aac4f09ba2f245c5dd6 Mon Sep 17 00:00:00 2001 From: Adam Jeniski Date: Fri, 15 Dec 2023 15:27:48 -0500 Subject: [PATCH] do day 15 --- 2023/src/day15.clj | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 2023/src/day15.clj diff --git a/2023/src/day15.clj b/2023/src/day15.clj new file mode 100644 index 0000000..df080df --- /dev/null +++ b/2023/src/day15.clj @@ -0,0 +1,41 @@ +(ns day15 (:require [clojure.string :as str] + [core :refer [get-puzzle-input]])) + +(def input (-> (first (get-puzzle-input 15)) + (str/replace #"\n" "") + (str/split #","))) + +(defn HASH [s] + (reduce (fn [acc el] (mod (* 17 (+ el acc)) 256)) + 0 + (map int s))) + +;; part 1 +(->> (map HASH input) + (reduce +)) + +;; part 2 +(->> input + (map (juxt #(re-find #"[a-zA-Z]+" %) + #(re-find #"[0-9]+" %))) + (map #(->> (first %) HASH (assoc % 2))) + (reduce (fn [m [label lens box]] + (if lens + (if (some #(= (first %) label) + (m box)) + (update m box (partial mapv #(if (= (first %) label) + [label lens] + %))) + (update m box conj [label lens])) + (update m box (partial filterv #(not= (first %) label))))) + (->> (range 5) + (map #(vector % [])) + (into {}))) + (map (fn [[box l]] + (map-indexed (fn [idx el] + (* (inc idx) + (inc box) + (parse-long (second el)))) + l))) + (apply concat) + (reduce +))