d24 p1
parent
e357237378
commit
405ee1eca0
@ -0,0 +1,47 @@
|
||||
#lang br
|
||||
(require racket/file racket/dict rackunit)
|
||||
|
||||
(define (bug? x) (char=? x #\#))
|
||||
|
||||
(define (parse-grid lns)
|
||||
(for*/list ([(ln row) (in-indexed lns)]
|
||||
[(c col) (in-indexed ln)])
|
||||
(cons (make-rectangular col row) c)))
|
||||
|
||||
(define (adjacent-bugs g tile)
|
||||
(for/sum ([delta '(+i -i 1 -1)]
|
||||
#:when (bug? (dict-ref g (+ tile delta) #\.)))
|
||||
1))
|
||||
|
||||
(define (step g)
|
||||
(for*/list ([row (in-range 5)]
|
||||
[col (in-range 5)])
|
||||
(define tile (make-rectangular col row))
|
||||
(cons tile
|
||||
(match (cons (dict-ref g tile) (adjacent-bugs g tile))
|
||||
[(cons #\# 1) #\#]
|
||||
[(cons #\# _) #\.]
|
||||
[(cons #\. (or 1 2)) #\#]
|
||||
[(cons other _) other]))))
|
||||
|
||||
(define (biodiversity-rating g)
|
||||
(for/sum ([(rec idx) (in-indexed g)]
|
||||
#:when (bug? (cdr rec)))
|
||||
(expt 2 idx)))
|
||||
|
||||
(define (solve lns)
|
||||
(let loop ([gs (list (parse-grid lns))])
|
||||
(define next-g (step (car gs)))
|
||||
(cond
|
||||
[(member next-g gs) (biodiversity-rating next-g)]
|
||||
[else (loop (cons next-g gs))])))
|
||||
|
||||
(check-eq?
|
||||
(solve (string-split "....#
|
||||
#..#.
|
||||
#..##
|
||||
..#..
|
||||
#....")) 2129920)
|
||||
|
||||
;; 1
|
||||
(check-eq? (solve (file->lines "24.rktd")) 18407158)
|
@ -0,0 +1,5 @@
|
||||
..#.#
|
||||
#####
|
||||
.#...
|
||||
...#.
|
||||
##...
|
Reference in New Issue