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) _))
|