diff --git a/12.rkt b/12.rkt new file mode 100644 index 0000000..44482b3 --- /dev/null +++ b/12.rkt @@ -0,0 +1,66 @@ +#lang curly-fn racket + +(require "scripts/aoc.rkt") + +;; solution for day 12 + +;; helper functions here + +(define (d->r deg) + (* (/ deg 180) pi)) + +(define (part1 input) + (define-values [dir x y] + (for/fold ([dir 0] [x 0] [y 0]) ([ins (in-list input)]) + (match-define (cons ltr num) ins) + (match ltr + ["N" (values dir x (+ y num))] + ["S" (values dir x (- y num))] + ["E" (values dir (+ x num) y)] + ["W" (values dir (- x num) y)] + ["L" (values (+ dir (d->r num)) x y)] + ["R" (values (- dir (d->r num)) x y)] + ["F" (values dir (+ x (* num (cos dir))) (+ y (* num (sin dir))))]))) + (inexact->exact (floor (abs (+ x y))))) + +(define (part2 input) + (define (rot x y d) + (values + (- (* x (cos d)) (* y (sin d))) + (+ (* x (sin d)) (* y (cos d))))) + (define-values [sx sy wx wy] + (for/fold ([sx 0] [sy 0] [wx 10] [wy 1]) ([ins (in-list input)]) + (match-define (cons ltr num) ins) + (match ltr + ["N" (values sx sy wx (+ wy num))] + ["S" (values sx sy wx (- wy num))] + ["E" (values sx sy (+ wx num) wy)] + ["W" (values sx sy (- wx num) wy)] + ["L" + (define-values [nwx nwy] (rot wx wy (d->r num))) + (values sx sy nwx nwy)] + ["R" + (define-values [nwx nwy] (rot wx wy (d->r (- num)))) + (values sx sy nwx nwy)] + ["F" + (values (+ sx (* num wx)) (+ sy (* num wy)) wx wy)]))) + (inexact->exact (floor (abs (+ (abs sx) (abs sy)))))) + +(module+ test + (require rackunit) + ;; tests here + (displayln "no tests :(")) + +(module+ main + (define input + (for/list ([line (in-list (file->lines "inputs/12"))]) + (match line + [(pregexp #px"^(.)([0-9]+)$" (list _ dir (app string->number num))) + (cons dir num)]))) + ;; part 1 + (answer 12 1 (part1 input)) + + ;; part 2 + (answer 12 2 (part2 input)) + + (displayln "meow"))