From 66478a04c0b69d776cee04b2eb901d05383de0b1 Mon Sep 17 00:00:00 2001 From: Adam Jeniski Date: Sat, 9 Dec 2023 08:50:12 -0500 Subject: [PATCH] do day 8 --- 2023/src/day08.clj | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 2023/src/day08.clj diff --git a/2023/src/day08.clj b/2023/src/day08.clj new file mode 100644 index 0000000..8f83b0b --- /dev/null +++ b/2023/src/day08.clj @@ -0,0 +1,51 @@ +(ns day08 + (:require [core :refer [get-puzzle-input]])) + +(defn parse-map [lines] + (->> lines + (map #(re-find #"(.*) = \((.*), (.*)\)" %)) + (map rest) + (map (fn [[a b c]] [a [b c]])) + (into {}))) + +(defn get-lcm [x] + (let + [gcd (fn gcd [a b] (if (= 0 b) a (gcd b (mod a b)))) + lcm (fn lcm [a b] (/ (* a b) (gcd a b)))] + (reduce lcm x))) + +(let [[dir _ & lines] (get-puzzle-input 8) + dir-idx (map #(condp = % + \L 0 + \R 1) + dir) + data (parse-map lines)] + (loop [node "AAA" + [dir-idx & drest] (cycle dir-idx) + n 0] + (if (= node "ZZZ") + n + (recur (get (data node) dir-idx) + drest + (inc n))))) + +(let [[dir _ & lines] (get-puzzle-input 8) + dir-idx (map #(condp = % + \L 0 + \R 1) + dir) + data (parse-map lines) + starts (->> data + keys + (filter #(= (last %) \A)))] + (->> starts + (map #(loop [node % + [dir-idx & drest] (cycle dir-idx) + n 0] + (if (= (last node) \Z) + n + (recur (get (data node) dir-idx) + drest + (inc n))))) + (get-lcm))) +