diff --git a/input/13.txt b/input/13.txt new file mode 100644 index 0000000..91abf0b --- /dev/null +++ b/input/13.txt @@ -0,0 +1,2 @@ +1000104 +41,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,659,x,x,x,x,x,x,x,23,x,x,x,x,13,x,x,x,x,x,19,x,x,x,x,x,x,x,x,x,29,x,937,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,17 diff --git a/src/13.rkt b/src/13.rkt new file mode 100644 index 0000000..decd2b7 --- /dev/null +++ b/src/13.rkt @@ -0,0 +1,21 @@ +#lang curly-fn racket + +(require math/number-theory + "../lib.rkt") + +(define input (problem-input 13)) +(define timestamp (string->number (first input))) +(define busses (map string->number (string-split (second input) ","))) +(define ids (filter identity busses)) + +(define part1 + (let* ([waits (map #{- (* % (add1 (quotient timestamp %))) timestamp} ids)] + [wait (apply min waits)] + [index (index-of waits wait)]) + (* wait (list-ref ids index)))) + +(define part2 + (let ([offsets (filter-map #{and %1 (negate %2)} busses (range (length busses)))]) + (solve-chinese offsets ids))) + +(show-solution part1 part2)