aboutsummaryrefslogtreecommitdiff
path: root/aoc2023-racket/day-21/day-21.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'aoc2023-racket/day-21/day-21.rkt')
-rw-r--r--aoc2023-racket/day-21/day-21.rkt69
1 files changed, 0 insertions, 69 deletions
diff --git a/aoc2023-racket/day-21/day-21.rkt b/aoc2023-racket/day-21/day-21.rkt
deleted file mode 100644
index b5478eb..0000000
--- a/aoc2023-racket/day-21/day-21.rkt
+++ /dev/null
@@ -1,69 +0,0 @@
-#lang racket
-
-(require advent-of-code
- threading
- simple-polynomial
- racket/hash)
-
-(define input (fetch-aoc-input (find-session) 2023 21 #:cache #true))
-
-(define initial-garden
- (~> (for*/list ([(row r) (in-indexed (string-split input "\n"))]
- [(col c) (in-indexed row)]
- #:unless (equal? col #\#))
- (cons (cons r c) (if (equal? col #\S) 'on 'off)))
- make-hash))
-
-(define (neighbors p)
- (match-define (cons r c) p)
- (list (cons (add1 r) c) (cons (sub1 r) c) (cons r (add1 c)) (cons r (sub1 c))))
-
-(define (make-n-steps garden n)
- (define g (hash-copy garden))
- (define (make-one-step)
- (define update (make-hash))
- (for ([(cons state) (in-hash g)] #:when (equal? state 'on))
- (hash-set! update cons 'off)
- (for ([neighbor (in-list (neighbors cons))] #:when (hash-has-key? g neighbor))
- (hash-set! update neighbor 'on)))
- (hash-union! g update #:combine/key (λ (_k _v v) v)))
- (for/fold ([_ void]
- #:result (~>> g hash-values (count (curry equal? 'on))))
- ([i (in-range n)])
- (displayln i)
- (make-one-step)))
-
-;; part 1
-(make-n-steps initial-garden 64)
-
-;; part 2
-;; the growth of the steps pattern is regular and quadratic
-;; the rock pattern has aisles in it that allow the steps pattern to expand freely
-;; such that it will cross from one side to another in X steps
-;; where X is the height/width of the repeated section
-
-(define grid-size (~> input (string-split "\n") length))
-(define half-size (/ (sub1 grid-size) 2))
-
-(define expanded-garden
- (~> (for*/list (#:do [(define rows (string-split input "\n"))]
- #:do [(define height (length rows))]
- [(row r) (in-indexed rows)]
- #:do [(define width (string-length row))]
- [(col c) (in-indexed row)]
- #:unless (equal? col #\#)
- [n (in-inclusive-range -3 3)]
- [m (in-inclusive-range -3 3)])
-
- (cons (cons (+ r (* n height)) (+ c (* m width)))
- (if (and (= n m 0) (equal? col #\S)) 'on 'off)))
- make-hash))
-
-(define fitting-points
- (for/list ([n (in-range 3)] #:do [(define size (+ half-size (* n grid-size)))])
- (cons n (make-n-steps expanded-garden size))))
-
-(define end-cycle 26501365)
-(define x (/ (- end-cycle half-size) grid-size))
-
-((points->polynomial fitting-points) x) \ No newline at end of file