From e7d9c9d0d32a087705c5c8bb311b059de1a8f073 Mon Sep 17 00:00:00 2001 From: haskal Date: Thu, 17 Dec 2020 01:07:02 -0500 Subject: [PATCH] day 17: more cleanup... --- 17.rkt | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/17.rkt b/17.rkt index 164e16f..4fae5b4 100644 --- a/17.rkt +++ b/17.rkt @@ -26,30 +26,22 @@ (define nearby/3d (filter #{zero? (pt-w %)} nearby/4d)) (define (calc-bounds world) - (define (helper getter reducer) - (apply reducer (set-map world getter))) - (define (helper2 reducer) - (apply pt (map #{helper % reducer} pt-getters))) - (values (helper2 min) (helper2 max))) + (define (helper reducer) + (apply pt (map #{apply reducer (set-map world %)} pt-getters))) + (values (helper min) (helper max))) (define (simulate world use-w?) - (define new-world (mutable-set)) (define-values [lower upper] (calc-bounds world)) (define nearby (if use-w? nearby/4d nearby/3d)) - (for ([pt (in-pts lower upper use-w?)]) - (define ct - (for*/sum ([nb (in-list nearby)]) - (if (set-member? world (pt+ pt nb)) 1 0))) - (when (if (set-member? world pt) (<= 2 ct 3) (= 3 ct)) - (set-add! new-world pt))) - - new-world) + (for*/set ([pt (in-pts lower upper use-w?)] + [ct (in-value (stream-count #{set-member? world (pt+ pt %)} (in-list nearby)))] + #:when (if (set-member? world pt) (<= 2 ct 3) (= 3 ct))) + pt)) (define (simulate/times world times use-w?) - (set-count - (for/fold ([world world]) ([_ (in-range times)]) - (simulate world use-w?)))) + (set-count (for/fold ([world world]) ([_ (in-range times)]) + (simulate world use-w?)))) (define part1 #{simulate/times % 6 #f}) (define part2 #{simulate/times % 6 #t}) @@ -64,11 +56,6 @@ (set-add! world (pt x y 0 0))))) world) -(module+ test - (require rackunit) - ;; tests here - (displayln "no tests :(")) - (module+ main (define input (parse "inputs/17")) (answer 17 1 (time (part1 input)))