aboutsummaryrefslogtreecommitdiff
path: root/aoc2022/day-20
diff options
context:
space:
mode:
authorH.J <thechairman@thechairman.info>2024-10-09 11:36:55 -0400
committerH.J <thechairman@thechairman.info>2024-10-09 11:36:55 -0400
commit8777ff071f7bb37631baa7b6717ad29961e50911 (patch)
tree6d59c4ed58e454b960339c3d1151f0a879e8d7cb /aoc2022/day-20
parent6156a9ef7be4012063a042aafb4e9b0d7eadde8e (diff)
downloadgleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.tar.gz
gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.zip
sorting by language
Diffstat (limited to 'aoc2022/day-20')
-rw-r--r--aoc2022/day-20/day-20.rkt48
1 files changed, 0 insertions, 48 deletions
diff --git a/aoc2022/day-20/day-20.rkt b/aoc2022/day-20/day-20.rkt
deleted file mode 100644
index 6dd1070..0000000
--- a/aoc2022/day-20/day-20.rkt
+++ /dev/null
@@ -1,48 +0,0 @@
-#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)