]> code.bitgloo.com Git - clyne/advent-of-code.git/commitdiff
add day 25
authorClyne Sullivan <clyne@bitgloo.com>
Sat, 25 Dec 2021 18:25:28 +0000 (13:25 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Sat, 25 Dec 2021 18:25:28 +0000 (13:25 -0500)
day25/part1.clj [new file with mode: 0644]

diff --git a/day25/part1.clj b/day25/part1.clj
new file mode 100644 (file)
index 0000000..df2947c
--- /dev/null
@@ -0,0 +1,40 @@
+(require '[clojure.string :as str])
+
+(defn cucumber-step-east [cuc-map]
+  (for [cuc-row cuc-map]
+    (let [shifted-cuc (str/replace cuc-row #">\." ".>")]
+      (if (and (= \> (last cuc-row)) (= \. (first cuc-row)))
+        (-> shifted-cuc
+            (str/replace #">$" ".")
+            (str/replace #"^\." ">"))
+        shifted-cuc))))
+
+(defn cucumber-step-south [cuc-map]
+  (let [extra-cuc-map
+        (conj (vec (cons (last cuc-map) cuc-map)) (first cuc-map))
+        new-extra-cuc-map
+        (for [y (reverse (range 1 (count extra-cuc-map)))]
+          (str/join
+            (for [x (range 0 (count (first cuc-map)))]
+              (cond
+                (and (= \. (get-in extra-cuc-map [y x])) (= \v (get-in extra-cuc-map [(dec y) x])))
+                \v
+                (and (= \v (get-in extra-cuc-map [y x])) (= \. (get-in extra-cuc-map [(inc y) x])))
+                \.
+                :else
+                (get-in extra-cuc-map [y x])))))]
+    (into [] (reverse (rest new-extra-cuc-map)))))
+
+(defn cucumber-seq [cuc-map-init]
+  (iterate (comp cucumber-step-south cucumber-step-east) cuc-map-init))
+
+(def input (->> (slurp "./in")
+                (str/split-lines)
+                (vec)))
+
+(loop [cuc-hist '() cuc-list (cucumber-seq input)]
+  (let [next-cuc (first cuc-list)]
+    (if (or (nil? next-cuc) (= (first cuc-hist) next-cuc))
+      (println "Cucs are stuck! Steps:" (count cuc-hist))
+      (recur (conj cuc-hist next-cuc) (rest cuc-list)))))
+