From 040def513f9624329085bcb7c0ee9b60da210f9f Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Sat, 4 Dec 2021 22:43:10 -0800 Subject: [PATCH] Day 05: Now purely functional! --- src/05.rkt | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/src/05.rkt b/src/05.rkt index d721c0f..22f7621 100644 --- a/src/05.rkt +++ b/src/05.rkt @@ -15,30 +15,35 @@ (define (count-crosses grid) (count #{> % 1} (hash-values grid))) -(define grid (make-hash)) +(define grid1 + (for/fold ([grid (hash)]) + ([hv hvs]) + (match hv + [`(,x ,y1 ,x ,y2) + (for/fold ([grid grid]) + ([y (range (min y1 y2) (add1 (max y1 y2)))]) + (hash-update grid `(,x ,y) add1 0))] + [`(,x1 ,y ,x2 ,y) + (for/fold ([grid grid]) + ([x (range (min x1 x2) (add1 (max x1 x2)))]) + (hash-update grid `(,x ,y) add1 0))]))) -(for ([hv hvs]) - (match hv - [`(,x ,y1 ,x ,y2) - (for ([y (range (min y1 y2) (add1 (max y1 y2)))]) - (hash-update! grid `(,x ,y) add1 0))] - [`(,x1 ,y ,x2 ,y) - (for ([x (range (min x1 x2) (add1 (max x1 x2)))]) - (hash-update! grid `(,x ,y) add1 0))])) +(define part1 (count-crosses grid1)) -(define part1 (count-crosses grid)) +(define grid2 + (for/fold ([grid grid1]) + ([diag diags]) + (match diag + [`(,x1 ,y1 ,x2 ,y2) + (define-values (x-offset x-step) + (if (>= x2 x1) (values add1 1) (values sub1 -1))) + (define-values (y-offset y-step) + (if (>= y2 y1) (values add1 1) (values sub1 -1))) + (for/fold ([grid grid]) + ([x (range x1 (x-offset x2) x-step)] + [y (range y1 (y-offset y2) y-step)]) + (hash-update grid `(,x ,y) add1 0))]))) -(for ([diag diags]) - (match diag - [`(,x1 ,y1 ,x2 ,y2) - (define-values (x-offset x-step) - (if (>= x2 x1) (values add1 1) (values sub1 -1))) - (define-values (y-offset y-step) - (if (>= y2 y1) (values add1 1) (values sub1 -1))) - (for ([x (range x1 (x-offset x2) x-step)] - [y (range y1 (y-offset y2) y-step)]) - (hash-update! grid `(,x ,y) add1 0))])) - -(define part2 (count-crosses grid)) +(define part2 (count-crosses grid2)) (show-solution part1 part2) \ No newline at end of file