You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

28 lines
784 B
Clojure

; Day 2, part 2
; Read a list of instructions from stdin:
; "down X" increases aim number by X,
; "up X" decreases aim by X,
; "forward X" increases xpos by X and depth by (aim * X).
; Print (xpos * depth) after end of data.
;
(require '[clojure.string :as str])
(println
(apply *
(map
(reduce
#(case (first %2)
"forward" (-> %1 (update :xpos + (second %2))
(update :depth + (* (%1 :aim) (second %2))))
"up" (update %1 :aim - (second %2))
"down" (update %1 :aim + (second %2)))
{:xpos 0 :depth 0 :aim 0}
(->> (slurp "./in")
str/split-lines
(map #(str/split % #" "))
(map #(update % 1 read-string))))
[:xpos :depth]
)))