aboutsummaryrefslogtreecommitdiff
path: root/racket/aoc2021/day-22/day-22.rkt
blob: 1dc42119a6fb1170b13d618f74e5a287d9651ecd (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
#lang racket
(require "../../jj-aoc.rkt"
         threading)

(struct step (instruction xs ys zs) #:transparent)

;; part 1
(define (clamped-range nmin nmax)
  (in-inclusive-range (max (string->number nmin) -50)
                      (min (string->number nmax) 50)))

(define steps
  (for/list ([l (in-list (~> (open-day 22 2021) (port->lines)))])
    (~>> l
         (regexp-match #px"(.+) x=(-?\\d+)..(-?\\d+),y=(-?\\d+)..(-?\\d+),z=(-?\\d+)..(-?\\d+)")
         rest
         (match _ [(list direction xmin xmax ymin ymax zmin zmax)
                   (step (string->symbol direction)
                         (clamped-range xmin xmax)
                         (clamped-range ymin ymax)
                         (clamped-range zmin zmax))]))))

(~> (for*/fold ([cubes (hash)])
               ([s (in-list steps)]
                [to (in-value (step-instruction s))]
                [x (step-xs s)]
                [y (step-ys s)]
                [z (step-zs s)])
      (hash-set cubes (list x y z) to))
    hash-values
    (count (curry equal? 'on) _))