diff options
author | H.J <thechairman@thechairman.info> | 2024-10-09 11:36:55 -0400 |
---|---|---|
committer | H.J <thechairman@thechairman.info> | 2024-10-09 11:36:55 -0400 |
commit | 8777ff071f7bb37631baa7b6717ad29961e50911 (patch) | |
tree | 6d59c4ed58e454b960339c3d1151f0a879e8d7cb /aoc2020/day-12/day-12.rkt | |
parent | 6156a9ef7be4012063a042aafb4e9b0d7eadde8e (diff) | |
download | gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.tar.gz gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.zip |
sorting by language
Diffstat (limited to 'aoc2020/day-12/day-12.rkt')
-rw-r--r-- | aoc2020/day-12/day-12.rkt | 56 |
1 files changed, 0 insertions, 56 deletions
diff --git a/aoc2020/day-12/day-12.rkt b/aoc2020/day-12/day-12.rkt deleted file mode 100644 index e4bbd32..0000000 --- a/aoc2020/day-12/day-12.rkt +++ /dev/null @@ -1,56 +0,0 @@ -#lang rackjure - -(require advent-of-code - threading - (only-in relation ->symbol ->number)) - -(struct instruction (direction distance) #:transparent) - -(define (parse-instruction str) - (match str - [(regexp #px"(\\w)(\\d+)" (list _ dir dist)) (instruction (->symbol dir) (->number dist))])) - -(define instructions - (~>> (fetch-aoc-input (find-session) 2020 12) string-split (map parse-instruction))) - -;; part 1 -(struct boat (x y nav) #:transparent) - -(define (angle->direction n) - (case n - [(0) 'E] - [(90) 'N] - [(180) 'W] - [(270) 'S])) - -(define (move-via-direct-command inst b) - (match-define (boat x y facing) b) - (match inst - [(instruction 'N n) (boat x (+ y n) facing)] - [(instruction 'S n) (boat x (- y n) facing)] - [(instruction 'E n) (boat (+ x n) y facing)] - [(instruction 'W n) (boat (- x n) y facing)] - [(instruction 'L n) (boat x y (modulo (+ facing n) 360))] - [(instruction 'R n) (boat x y (modulo (- facing n) 360))] - [(instruction 'F n) (move-via-direct-command (instruction (angle->direction facing) n) b)])) - -(define (find-boat-destination using start instructions) - (match-define (boat x y _) (foldl using start instructions)) - (+ (abs x) (abs y))) - -(find-boat-destination move-via-direct-command (boat 0 0 0) instructions) - -;; part 2 -(define (move-via-waypoint inst b) - (match-define (boat x y (cons wp-x wp-y)) b) - (match inst - [(instruction 'N n) (boat x y (cons wp-x (+ wp-y n)))] - [(instruction 'S n) (boat x y (cons wp-x (- wp-y n)))] - [(instruction 'E n) (boat x y (cons (+ wp-x n) wp-y))] - [(instruction 'W n) (boat x y (cons (- wp-x n) wp-y))] - [(instruction _ 180) (boat x y (cons (- wp-x) (- wp-y)))] - [(or (instruction 'L 90) (instruction 'R 270)) (boat x y (cons (- wp-y) wp-x))] - [(or (instruction 'R 90) (instruction 'L 270)) (boat x y (cons wp-y (- wp-x)))] - [(instruction 'F n) (boat (+ x (* n wp-x)) (+ y (* n wp-y)) (cons wp-x wp-y))])) - -(find-boat-destination move-via-waypoint (boat 0 0 '(10 . 1)) instructions) |