Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (ns alarm.core
- (:require [clojure.string :refer [split trim-newline]]))
- (defn interpret
- ([mem] (interpret mem 0))
- ([mem pos]
- (let [op (mem pos)
- x (get mem (inc pos))
- y (get mem (+ 2 pos))
- xv (get mem x)
- yv (get mem y)
- t (get mem (+ 3 pos))
- write #(update mem t (constantly %))]
- (case op
- 1 (recur (write (+ xv yv)) (+ 4 pos))
- 2 (recur (write (* xv yv)) (+ 4 pos))
- (first mem)))))
- (defn set-mem [mem noun verb]
- (-> mem
- (update 1 (constantly noun))
- (update 2 (constantly verb))))
- (defn find-res [num mem]
- (for [noun (range 100)
- verb (range 100)
- :when (= (interpret
- (set-mem mem noun verb))
- num)]
- (+ (* 100 noun) verb)))
- (defn read-input! [filename]
- (as-> (slurp filename) l
- (trim-newline l)
- (split l #",")
- (mapv #(Integer/parseInt %) l)))
- (defn -main []
- (let [mem (read-input! "input.txt")
- one (interpret mem)
- two (first (find-res 19690720 mem))]
- (println one)
- (println two)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement