aboutsummaryrefslogtreecommitdiff
path: root/racket/aoc2021/day-02/day-02.rkt
blob: 0bd0c3d4dc9d64fddaf16e25d4ce228d620fca8b (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
#lang racket
(require advent-of-code
         threading
         algorithms)

(define motion-data
  (~> (open-aoc-input (find-session) 2021 2 #:cache (string->path "./cache"))
      (port->list read _)
      (chunks-of _ 2)))

;; part 1
(for/fold ([depth 0] [position 0] #:result (* depth position)) ([motion (in-list motion-data)])
  (match motion
    [(list 'forward x) (values depth (+ position x))]
    [(list 'up x) (values (- depth x) position)]
    [(list 'down x) (values (+ depth x) position)]))

;; part 2
(for/fold ([aim 0] [depth 0] [position 0] #:result (* depth position))
          ([motion (in-list motion-data)])
  (match motion
    [(list 'forward x) (values aim (+ depth (* aim x)) (+ position x))]
    [(list 'up x) (values (- aim x) depth position)]
    [(list 'down x) (values (+ aim x) depth position)]))