day 12
This commit is contained in:
parent
a249bedeb6
commit
4b124189a0
|
@ -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"))
|
Loading…
Reference in New Issue