diff options
author | Hunky Jimpjorps <thechairman@thechairman.info> | 2022-12-21 00:05:53 -0500 |
---|---|---|
committer | Hunky Jimpjorps <thechairman@thechairman.info> | 2022-12-21 00:05:53 -0500 |
commit | 8c073d45608f3030ea755fd57d0190efbe89fa18 (patch) | |
tree | 441003e34b4127e650a4c718b4f7aa96ece27e18 /2022 | |
parent | 545888b248db22805e9bd24b4fea1ce0524fb0be (diff) | |
parent | f8c7d4e47f04fa2bfbbe5a9487f765bdf898c3ba (diff) | |
download | gleam_aoc-8c073d45608f3030ea755fd57d0190efbe89fa18.tar.gz gleam_aoc-8c073d45608f3030ea755fd57d0190efbe89fa18.zip |
Merge branch 'main' of https://github.com/hunkyjimpjorps/AdventOfCode into main
Diffstat (limited to '2022')
-rw-r--r-- | 2022/day-16/day-16.rkt | 10 | ||||
-rw-r--r-- | 2022/day-20/day-20.rkt | 48 |
2 files changed, 49 insertions, 9 deletions
diff --git a/2022/day-16/day-16.rkt b/2022/day-16/day-16.rkt index 2503da1..0e5ab77 100644 --- a/2022/day-16/day-16.rkt +++ b/2022/day-16/day-16.rkt @@ -60,12 +60,4 @@ (values running-pressure remaining-valves*)))] [else (cons current-pressure available-valves)])) -(car (find-best-single-route "AA")) - -;; part 2 -; (define (find-best-double-route start) -; (define done-by-me (find-best-single-route start 26)) -; (define done-by-elephant (find-best-single-route start 26 0 (cdr done-by-me))) -; (+ (car done-by-me) (car done-by-elephant))) - -; (find-best-double-route "AA") +(car (find-best-single-route "AA"))
\ No newline at end of file diff --git a/2022/day-20/day-20.rkt b/2022/day-20/day-20.rkt new file mode 100644 index 0000000..6dd1070 --- /dev/null +++ b/2022/day-20/day-20.rkt @@ -0,0 +1,48 @@ +#lang racket +(require advent-of-code + threading) + +(define data (port->list read (open-aoc-input (find-session) 2022 20 #:cache #true))) + +(define gps-lst data) +(define gps-len (length gps-lst)) +(define gps-indexed (map cons (inclusive-range 1 gps-len) gps-lst)) + +(define (mix pt data) + (match-define (list left ... (== pt) right ...) data) + (define start (index-of data pt)) + (define move-by (modulo (cdr pt) (sub1 gps-len))) + (cond + [(= 0 move-by) data] + [(<= move-by (length right)) + (match-define-values (new-left new-right) + (split-at (append left right) (modulo (+ move-by start) (sub1 gps-len)))) + (append new-left (list pt) new-right)] + [else + (match-define-values (new-left new-right) + (split-at (append left right) (modulo (+ move-by start) (sub1 gps-len)))) + (append new-left (list pt) new-right)])) + +(define (mix-gps data original) + (for/fold ([pts data]) ([pt original]) + (mix pt pts))) + +(define (cycle-mixed-gps mixed) + (define lst (map cdr mixed)) + (in-sequences (drop lst (index-of lst 0)) (in-cycle lst))) + +(define (calculate-answer seq) + (for/sum ([id '(1000 2000 3000)]) (sequence-ref seq id))) + +;; part 1 +(~> gps-indexed (mix-gps _ gps-indexed) cycle-mixed-gps calculate-answer) + +;; part 2 +(define encrypted-gps-indexed + (for/list ([pt (in-list gps-indexed)] #:do [(match-define (cons i v) pt)]) + (cons i (* 811589153 v)))) + +(~>> encrypted-gps-indexed + ((λ (data) (foldr (λ (_ pts) (mix-gps pts data)) data (range 10)))) + cycle-mixed-gps + calculate-answer) |