Day 8 refactor, just a little
This commit is contained in:
parent
8acb5f24f1
commit
3f2c8c7642
75
src/08.rkt
75
src/08.rkt
|
@ -12,72 +12,49 @@
|
||||||
(define input
|
(define input
|
||||||
(~>> (problem-input 8) #;test
|
(~>> (problem-input 8) #;test
|
||||||
(map string->list)
|
(map string->list)
|
||||||
(mmap char->number)))
|
(mmap char->number)
|
||||||
|
(map list->vector)
|
||||||
|
list->vector))
|
||||||
|
|
||||||
(define (get-tree r c)
|
(define (get-tree r c)
|
||||||
(list-ref (list-ref input r) c))
|
(vector-ref (vector-ref input r) c))
|
||||||
|
|
||||||
(define width (length (first input)))
|
(define width (vector-length (vector-first input)))
|
||||||
(define height (length input))
|
(define height (vector-length input))
|
||||||
|
|
||||||
(define (part1)
|
(define (part1)
|
||||||
(define s1
|
(define talls (mutable-set))
|
||||||
(for/fold ([talls (set)])
|
(for ([r (range height)])
|
||||||
([r (range height)])
|
(set-add! talls (cons r 0))
|
||||||
(for/fold ([talls talls]
|
(set-add! talls (cons r (sub1 width)))
|
||||||
[tallest (get-tree r 0)]
|
(for/fold ([tallest (get-tree r 0)])
|
||||||
#:result talls)
|
|
||||||
([c (range width)])
|
([c (range width)])
|
||||||
(define t (get-tree r c))
|
(define t (get-tree r c))
|
||||||
(if (< tallest t)
|
(if (< tallest t)
|
||||||
(values (set-add talls (cons r c)) t)
|
(begin (set-add! talls (cons r c)) t)
|
||||||
(values talls tallest)))))
|
tallest))
|
||||||
(define s2
|
(for/fold ([tallest (get-tree r (sub1 width))])
|
||||||
(for/fold ([talls s1])
|
|
||||||
([r (range height)])
|
|
||||||
(for/fold ([talls talls]
|
|
||||||
[tallest (get-tree r (sub1 width))]
|
|
||||||
#:result talls)
|
|
||||||
([c (reverse (range width))])
|
([c (reverse (range width))])
|
||||||
(define t (get-tree r c))
|
(define t (get-tree r c))
|
||||||
(if (< tallest t)
|
(if (< tallest t)
|
||||||
(values (set-add talls (cons r c)) t)
|
(begin (set-add! talls (cons r c)) t)
|
||||||
(values talls tallest)))))
|
tallest)))
|
||||||
(define s3
|
(for ([c (range width)])
|
||||||
(for/fold ([talls s2])
|
(set-add! talls (cons 0 c))
|
||||||
([c (range width)])
|
(set-add! talls (cons (sub1 height) c))
|
||||||
(for/fold ([talls talls]
|
(for/fold ([tallest (get-tree 0 c)])
|
||||||
[tallest (get-tree 0 c)]
|
|
||||||
#:result talls)
|
|
||||||
([r (range height)])
|
([r (range height)])
|
||||||
(define t (get-tree r c))
|
(define t (get-tree r c))
|
||||||
(if (< tallest t)
|
(if (< tallest t)
|
||||||
(values (set-add talls (cons r c)) t)
|
(begin (set-add! talls (cons r c)) t)
|
||||||
(values talls tallest)))))
|
tallest))
|
||||||
(define s4
|
(for/fold ([tallest (get-tree (sub1 height) c)])
|
||||||
(for/fold ([talls s3])
|
|
||||||
([c (range width)])
|
|
||||||
(for/fold ([talls talls]
|
|
||||||
[tallest (get-tree (sub1 height) c)]
|
|
||||||
#:result talls)
|
|
||||||
([r (reverse (range height))])
|
([r (reverse (range height))])
|
||||||
(define t (get-tree r c))
|
(define t (get-tree r c))
|
||||||
(if (< tallest t)
|
(if (< tallest t)
|
||||||
(values (set-add talls (cons r c)) t)
|
(begin (set-add! talls (cons r c)) t)
|
||||||
(values talls tallest)))))
|
tallest)))
|
||||||
(define s5
|
(set-count talls))
|
||||||
(for/fold ([talls s4])
|
|
||||||
([r (range height)])
|
|
||||||
(~> talls
|
|
||||||
(set-add (cons r 0))
|
|
||||||
(set-add (cons r (sub1 width))))))
|
|
||||||
(define s6
|
|
||||||
(for/fold ([talls s5])
|
|
||||||
([c (range width)])
|
|
||||||
(~> talls
|
|
||||||
(set-add (cons 0 c))
|
|
||||||
(set-add (cons (sub1 height) c)))))
|
|
||||||
(set-count s6))
|
|
||||||
|
|
||||||
(define (score r c)
|
(define (score r c)
|
||||||
(define t (get-tree r c))
|
(define t (get-tree r c))
|
||||||
|
|
Loading…
Reference in New Issue