From 24630da9775b371da92abf2d7879593c6c1ced1f Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Wed, 16 Dec 2020 23:18:59 -0800 Subject: [PATCH] Minor refactoring for Day 17. --- src/17.rkt | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/17.rkt b/src/17.rkt index 4105052..be87a9b 100644 --- a/src/17.rkt +++ b/src/17.rkt @@ -7,31 +7,34 @@ (define grid (for*/fold ([grid (hash)]) - ([x 8] - [y 8]) + ([x (length (first input))] + [y (length input)]) (hash-set grid (list x y 0 0) (list-ref (list-ref input y) x)))) (define (actives chars) (count #{char=? % #\#} chars)) (define (cycle part1? grid) + (define (in-range+ from to) + (in-range (- from 1) (+ to 2))) (let* ([coords (hash-keys grid)] [xs (map first coords)] [min-x (apply min xs)] [max-x (apply max xs)] [ys (map second coords)] [min-y (apply min ys)] [max-y (apply max ys)] [zs (map third coords)] [min-z (apply min zs)] [max-z (apply max zs)] [ws (map fourth coords)] [min-w (apply min ws)] [max-w (apply max ws)]) (for*/fold ([grid* grid]) - ([x (in-range (- min-x 1) (+ max-x 2))] - [y (in-range (- min-y 1) (+ max-y 2))] - [z (in-range (- min-z 1) (+ max-z 2))] - [w (if part1? '(0) (in-range (- min-w 1) (+ max-w 2)))]) + ([x (in-range+ min-x max-x)] + [y (in-range+ min-y max-y)] + [z (in-range+ min-z max-z)] + [w (if part1? '(0) (in-range+ min-w max-w))]) (let* ([cube (hash-ref grid (list x y z w) #\.)] - [neighbours (for*/list ([x* (in-range (- x 1) (+ x 2))] - [y* (in-range (- y 1) (+ y 2))] - [z* (in-range (- z 1) (+ z 2))] - [w* (if part1? '(0) (in-range (- w 1) (+ w 2)))] - #:unless (and (= x x*) (= y y*) (= z z*) (= w w*))) - (hash-ref grid (list x* y* z* w*) #\.))] + [neighbours + (for*/list ([x* (in-range+ x x)] + [y* (in-range+ y y)] + [z* (in-range+ z z)] + [w* (if part1? '(0) (in-range+ w w))] + #:unless (and (= x x*) (= y y*) (= z z*) (= w w*))) + (hash-ref grid (list x* y* z* w*) #\.))] [active-neighbours (actives neighbours)]) (cond [(and (char=? cube #\#) (not (<= 2 active-neighbours 3)))