diff --git a/2017/d17/main.rkt b/2017/d17/main.rkt new file mode 100644 index 0000000..85c6bb1 --- /dev/null +++ b/2017/d17/main.rkt @@ -0,0 +1,24 @@ +#lang reader "../aoc-lang.rkt" +(provide (rename-out [#%mb #%module-begin]) ★ ★★) + +(define-macro (#%mb (STARS) (STEP-SIZE)) + #`(#%module-begin + (time (STARS STEP-SIZE)))) + +(define (★ step-size) + (define iterations 2017) + (for/fold ([buf '(0)] + [current-pos 0] + #:result (second (member iterations buf))) + ([i (in-range iterations)]) + (define pos (add1 (modulo (+ current-pos step-size) (add1 i)))) + (define-values (head tail) (split-at buf pos)) + (values (append head (list (add1 i)) tail) pos))) + +(define (★★ step-size) + (for/fold ([in-first-pos #f] + [current-pos 0] + #:result in-first-pos) + ([i (in-range (* 50 1e6))]) + (define pos (add1 (modulo (+ current-pos step-size) (add1 i)))) + (values (if (= 1 pos) (add1 i) in-first-pos) pos))) diff --git a/2017/d17/star1.rkt b/2017/d17/star1.rkt new file mode 100644 index 0000000..dc3928c --- /dev/null +++ b/2017/d17/star1.rkt @@ -0,0 +1,2 @@ +#lang reader "main.rkt" ★ ; 417 +348 \ No newline at end of file diff --git a/2017/d17/star2.rkt b/2017/d17/star2.rkt new file mode 100644 index 0000000..ca9313c --- /dev/null +++ b/2017/d17/star2.rkt @@ -0,0 +1,2 @@ +#lang reader "main.rkt" ★★ ; 34334221 +348 \ No newline at end of file diff --git a/2017/d17/test1.rkt b/2017/d17/test1.rkt new file mode 100644 index 0000000..cf88402 --- /dev/null +++ b/2017/d17/test1.rkt @@ -0,0 +1,2 @@ +#lang reader "main.rkt" ★ ; 638 +3 \ No newline at end of file