2017
parent
30a2928e99
commit
bbbb575569
@ -0,0 +1,28 @@
|
|||||||
|
#lang reader "../aoc-lang.rkt"
|
||||||
|
|
||||||
|
(provide (rename-out [#%mb #%module-begin]))
|
||||||
|
(define-macro (#%mb (STARS) (BANK ...))
|
||||||
|
#`(#%module-begin
|
||||||
|
(count-redists (list->vector '(BANK ...)) 'STARS)))
|
||||||
|
|
||||||
|
(define (redist starting-vec)
|
||||||
|
(define vec (vector-copy starting-vec))
|
||||||
|
(define max-blocks (vector-argmax values vec))
|
||||||
|
(define start-at (vector-member max-blocks vec))
|
||||||
|
(vector-set! vec start-at 0)
|
||||||
|
(for ([block (in-range max-blocks)]
|
||||||
|
[idx (in-cycle (shift-left-cycle (range (vector-length vec)) (add1 start-at)))])
|
||||||
|
(vector-set! vec idx (+ (vector-ref vec idx) 1)))
|
||||||
|
vec)
|
||||||
|
|
||||||
|
(define (count-redists bankvec stars)
|
||||||
|
(let/ec exit
|
||||||
|
(for/fold ([bankvecs-seen (list bankvec)])
|
||||||
|
([i (in-naturals)])
|
||||||
|
(cond
|
||||||
|
[(member (car bankvecs-seen) (cdr bankvecs-seen))
|
||||||
|
=> (λ (tail) (exit (if (eq? stars '★)
|
||||||
|
i
|
||||||
|
(- (length bankvecs-seen) (length tail)))))])
|
||||||
|
(cons (redist (car bankvecs-seen)) bankvecs-seen))))
|
||||||
|
|
@ -0,0 +1,2 @@
|
|||||||
|
#lang reader "main.rkt" ★ ; 14029
|
||||||
|
10 3 15 10 5 15 5 15 9 2 5 8 5 2 3 6
|
@ -0,0 +1,2 @@
|
|||||||
|
#lang reader "main.rkt" ★★ ; 2765
|
||||||
|
10 3 15 10 5 15 5 15 9 2 5 8 5 2 3 6
|
@ -0,0 +1,2 @@
|
|||||||
|
#lang reader "main.rkt" ★
|
||||||
|
0 2 7 0
|
@ -0,0 +1,2 @@
|
|||||||
|
#lang reader "main.rkt" ★★
|
||||||
|
0 2 7 0
|
Reference in New Issue