aboutsummaryrefslogtreecommitdiffstats
path: root/day2/part2.clj
blob: 35fe3fb059dadc5fd2c3bd6f8a16bfa4033f994c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
; 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])

(loop [xpos 0 depth 0 aim 0]
  (let [input (read-line)]
    (if (empty? input)
      (println (* xpos depth))
      (let [ins (str/split input #" ")
            n (Integer/parseInt (second ins))
            ]
        (recur
          (if (= (first ins) "forward")
            (+ xpos n)
            xpos
            )
          (if (= (first ins) "forward")
            (+ depth (* aim n))
            depth
            )
          (case (first ins)
            "down" (+ aim n)
            "up" (- aim n)
            aim)
          )
        )
      )
    )
  )