aboutsummaryrefslogtreecommitdiff
path: root/racket/aoc2015/day-03/day-03.rkt
blob: 1d4495584ab6673dc109f678c99ed99f1d707ae7 (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
#lang racket
(require "../../jj-aoc.rkt"
         threading
         (only-in algorithms chunks-of)
         racket/hash)

(define directions
  (for/list ([l (in-input-port-chars (open-day 3 2015))])
    (string->symbol (string l))))

(define (trace-santa dirs)
  (define visits (make-hash))
  (for/fold ([x 0] [y 0] #:result visits) ([dir (in-list dirs)])
    (hash-set! visits `(,x ,y) #true)
    (match dir
      ['^ (values x (add1 y))]
      ['v (values x (sub1 y))]
      ['< (values (add1 x) y)]
      ['> (values (sub1 x) y)])))

;; part 1
(~> directions trace-santa hash-values length)

;; part 2
(~> directions (chunks-of 2) (apply map list _) (map trace-santa _) (match-define (list real robo) _))

(hash-union! real robo #:combine (λ _ #true))
(~> real hash-values length)