diff options
author | Leah Neukirchen <leah@vuxu.org> | 2020-12-09 19:11:42 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2020-12-09 19:11:42 +0100 |
commit | a521c98193a01927f5d4f7aa245a6fc9ca7d8ad9 (patch) | |
tree | 3b631f6a74f94cff2e3c6461a5b23b72dd5e2298 /day08.clj | |
parent | 994a71edcd0353bddf71008fd5599c97098a966c (diff) | |
download | adventofcode2020-a521c98193a01927f5d4f7aa245a6fc9ca7d8ad9.tar.gz adventofcode2020-a521c98193a01927f5d4f7aa245a6fc9ca7d8ad9.tar.xz adventofcode2020-a521c98193a01927f5d4f7aa245a6fc9ca7d8ad9.zip |
day08
Diffstat (limited to 'day08.clj')
-rw-r--r-- | day08.clj | 29 |
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 |