2016 d16 p2

master
Matthew Butterick 5 years ago
parent 7a0a2ca36f
commit 8c1bf08ebe

@ -10,7 +10,7 @@
(define-macro (mb SIZE INIT) (define-macro (mb SIZE INIT)
#'(#%module-begin #'(#%module-begin
(display (list->string (checksum (fill-disk (string->list INIT) (string->number SIZE))))))) (time (display (list->string (checksum (fill-disk (string->list INIT) (string->number SIZE))))))))
(define (dragonize cs) (define (dragonize cs)
(append cs '(#\0) (append cs '(#\0)
@ -25,14 +25,15 @@
(take cs size) (take cs size)
(loop (dragonize cs))))) (loop (dragonize cs)))))
(require sugar/list)
(define (checksum cs) (define (checksum cs)
(let loop ([cs cs]) (define cvec (list->vector cs))
(if (odd? (length cs)) (let loop ([cvec cvec])
cs (match (vector-length cvec)
(loop [(? odd?) (vector->list cvec)]
(for/list ([match (in-list (slice-at cs 2))]) [len
(if (member match '((#\0 #\0) (#\1 #\1))) (define newvec (make-vector (/ len 2) #\0))
#\1 (for ([idx (in-range 0 (vector-length cvec) 2)]
#\0)))))) #:when (char=? (vector-ref cvec idx) (vector-ref cvec (add1 idx))))
(vector-set! newvec (/ idx 2) #\1))
(loop newvec)])))