diff --git a/2017/d13/main.rkt b/2017/d13/main.rkt new file mode 100644 index 0000000..1afc83f --- /dev/null +++ b/2017/d13/main.rkt @@ -0,0 +1,25 @@ +#lang reader "../aoc-lang.rkt" +(require (for-syntax racket/string racket/sequence) racket/dict) +(provide (rename-out [#%mb #%module-begin]) ★ ★★) + +(define-macro (#%mb (STARS) (DEPTH: RANGE) ...) + (with-pattern ([(DEPTH ...) + (for/list ([id (in-syntax #'(DEPTH: ...))]) + (string->number (string-trim (symbol->string (syntax->datum id)) ":")))]) + #'(#%module-begin (STARS '(DEPTH ...) '(RANGE ...))))) + +(define (caught? depth range [delay 0]) + (zero? (modulo (+ depth delay) (* 2 (sub1 range))))) + +(define (★ ds rs) + (for/sum ([d (in-list ds)] + [r (in-list rs)] + #:when (caught? d r)) + (* d r))) + +(define (★★ ds rs) + (for/first ([delay (in-naturals)] + #:unless (for/or ([d (in-list ds)] + [r (in-list rs)]) + (caught? d r delay))) + delay)) diff --git a/2017/d13/star1.rkt b/2017/d13/star1.rkt new file mode 100644 index 0000000..d3c0abd --- /dev/null +++ b/2017/d13/star1.rkt @@ -0,0 +1,44 @@ +#lang reader "main.rkt" ★ ; 1612 +0: 3 +1: 2 +2: 4 +4: 6 +6: 4 +8: 6 +10: 5 +12: 6 +14: 8 +16: 8 +18: 8 +20: 6 +22: 12 +24: 8 +26: 8 +28: 10 +30: 9 +32: 12 +34: 8 +36: 12 +38: 12 +40: 12 +42: 14 +44: 14 +46: 12 +48: 12 +50: 12 +52: 12 +54: 14 +56: 12 +58: 14 +60: 14 +62: 14 +64: 14 +70: 10 +72: 14 +74: 14 +76: 14 +78: 14 +82: 14 +86: 17 +88: 18 +96: 26 \ No newline at end of file diff --git a/2017/d13/star2.rkt b/2017/d13/star2.rkt new file mode 100644 index 0000000..53a734a --- /dev/null +++ b/2017/d13/star2.rkt @@ -0,0 +1,44 @@ +#lang reader "main.rkt" ★★ ; 3907994 +0: 3 +1: 2 +2: 4 +4: 6 +6: 4 +8: 6 +10: 5 +12: 6 +14: 8 +16: 8 +18: 8 +20: 6 +22: 12 +24: 8 +26: 8 +28: 10 +30: 9 +32: 12 +34: 8 +36: 12 +38: 12 +40: 12 +42: 14 +44: 14 +46: 12 +48: 12 +50: 12 +52: 12 +54: 14 +56: 12 +58: 14 +60: 14 +62: 14 +64: 14 +70: 10 +72: 14 +74: 14 +76: 14 +78: 14 +82: 14 +86: 17 +88: 18 +96: 26 \ No newline at end of file diff --git a/2017/d13/test1.rkt b/2017/d13/test1.rkt new file mode 100644 index 0000000..e83e90c --- /dev/null +++ b/2017/d13/test1.rkt @@ -0,0 +1,5 @@ +#lang reader "main.rkt" ★ ; 24 +0: 3 +1: 2 +4: 4 +6: 4 \ No newline at end of file diff --git a/2017/d13/test2.rkt b/2017/d13/test2.rkt new file mode 100644 index 0000000..2bd0ab2 --- /dev/null +++ b/2017/d13/test2.rkt @@ -0,0 +1,5 @@ +#lang reader "main.rkt" ★★ +0: 3 +1: 2 +4: 4 +6: 4 \ No newline at end of file