From e661a3cd92882c6d054a9bebc7f48b626dc800d2 Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Thu, 9 Dec 2021 00:25:27 -0800 Subject: [PATCH] Day 09: Use vectors instead of lists. --- src/09.rkt | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/09.rkt b/src/09.rkt index 0ca2006..9cfe221 100644 --- a/src/09.rkt +++ b/src/09.rkt @@ -4,18 +4,18 @@ "../lib.rkt") (define input - (~>> (problem-input 9) - (map string->list) - (map #{map char->number %}))) + (for/vector ([row (problem-input 9)]) + (for/vector ([col (string->list row)]) + (char->number col)))) -(define rows (length input)) -(define cols (length (first input))) +(define rows (vector-length input)) +(define cols (vector-length (vector-ref input 0))) (define (grid-ref grid row col [default +inf.0]) (if (or (< row 0) (>= row rows) (< col 0) (>= col cols)) default - (list-ref (list-ref grid row) col))) + (vector-ref (vector-ref grid row) col))) (define (neighbours row col) (list (cons (sub1 row) col) @@ -44,16 +44,14 @@ (set-add seen loc)))))) (define-values (part1 part2) - (for/fold ([risk 0] - [basins '()] - #:result (values risk (apply * (take (sort basins >) 3)))) - ([row (range rows)]) - (for/fold ([risk risk] - [basins basins]) - ([col (range cols)]) - (if (low? row col) - (values (+ (add1 (grid-ref input row col)) risk) - (cons (basin row col) basins)) - (values risk basins))))) + (for*/fold ([risk 0] + [basins '()] + #:result (values risk (apply * (take (sort basins >) 3)))) + ([row (range rows)] + [col (range cols)]) + (if (low? row col) + (values (+ (add1 (grid-ref input row col)) risk) + (cons (basin row col) basins)) + (values risk basins)))) (show-solution part1 part2) \ No newline at end of file