d08
parent
8c1bf08ebe
commit
a370c48b18
@ -0,0 +1,36 @@
|
|||||||
|
#lang br
|
||||||
|
(require racket/file rackunit racket/sequence)
|
||||||
|
|
||||||
|
(define pixel-data (for/list ([c (in-string (file->string "08.rktd"))])
|
||||||
|
(string->number (string c))))
|
||||||
|
(define img-width 25)
|
||||||
|
(define img-height 6)
|
||||||
|
|
||||||
|
(define layers (for/list ([layer (in-slice (* img-width img-height) pixel-data)])
|
||||||
|
layer))
|
||||||
|
|
||||||
|
(define ((digit-count digit) layer)
|
||||||
|
(for/sum ([x (in-list layer)]
|
||||||
|
#:when (= x digit))
|
||||||
|
1))
|
||||||
|
|
||||||
|
(define least-zero-layer (argmin (digit-count 0) layers))
|
||||||
|
|
||||||
|
;; 1
|
||||||
|
(check-eq?
|
||||||
|
(* ((digit-count 1) least-zero-layer) ((digit-count 2) least-zero-layer))
|
||||||
|
2286)
|
||||||
|
|
||||||
|
(define (sum-pixels . ps)
|
||||||
|
(for/first ([p (in-list ps)]
|
||||||
|
#:when (< p 2))
|
||||||
|
p))
|
||||||
|
|
||||||
|
(define (layer->string layer)
|
||||||
|
(string-join (for/list ([row (in-slice img-width layer)])
|
||||||
|
(string-join (for/list ([digit (in-list row)])
|
||||||
|
(if (zero? digit) " " "X")) "")) "\n"))
|
||||||
|
|
||||||
|
;; 2
|
||||||
|
(check-equal? (layer->string (apply map sum-pixels layers))
|
||||||
|
" XX XX XXXX X XXX \nX X X X X X X \nX X X X X X \nX X X X XXX \nX X X X X X X \n XX XX XXXX XXXX X ")
|
File diff suppressed because one or more lines are too long
Reference in New Issue