about summary refs log tree commit diff
path: root/day08.clj
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2020-12-09 19:11:42 +0100
committerLeah Neukirchen <leah@vuxu.org>2020-12-09 19:11:42 +0100
commita521c98193a01927f5d4f7aa245a6fc9ca7d8ad9 (patch)
tree3b631f6a74f94cff2e3c6461a5b23b72dd5e2298 /day08.clj
parent994a71edcd0353bddf71008fd5599c97098a966c (diff)
downloadadventofcode2020-a521c98193a01927f5d4f7aa245a6fc9ca7d8ad9.tar.gz
adventofcode2020-a521c98193a01927f5d4f7aa245a6fc9ca7d8ad9.tar.xz
adventofcode2020-a521c98193a01927f5d4f7aa245a6fc9ca7d8ad9.zip
day08
Diffstat (limited to 'day08.clj')
-rw-r--r--day08.clj29
1 files changed, 29 insertions, 0 deletions
diff --git a/day08.clj b/day08.clj
new file mode 100644
index 0000000..d6b2d60
--- /dev/null
+++ b/day08.clj
@@ -0,0 +1,29 @@
+(defn parse [l]
+  (let [words (clojure.string/split l #" ")]
+    [(first words) (Integer/parseInt (second words))]))
+
+(def data
+  (->> (slurp "day08")
+       (clojure.string/split-lines)
+       (map parse)
+       vec))
+
+(defn run [p ip acc seen]
+  (if (or (seen ip) (>= ip (count p)))
+    [ip acc]
+    (let [seen (conj seen ip)
+          [op arg] (p ip)]
+      (case op
+        "nop" (recur p (inc ip)   acc         seen)
+        "acc" (recur p (inc ip)   (+ acc arg) seen)
+        "jmp" (recur p (+ ip arg) acc         seen)))))
+
+(second (run data 0 0 #{})) ; => 1451
+
+(some (fn [n]
+        (let [[ip acc] (run (update-in data [n 0]
+                                       {"nop" "jmp" ,"jmp" "nop", "acc" "acc"})
+                         0 0 #{})]
+          (if (= ip (count data))
+            acc)))
+      (range (count data))) ; => 1160