aboutsummaryrefslogtreecommitdiff
path: root/aoc2022/day-10/day-10.rkt
diff options
context:
space:
mode:
authorJ.J <thechairman@thechairman.info>2023-11-30 17:10:00 -0500
committerJ.J <thechairman@thechairman.info>2023-11-30 17:10:00 -0500
commit8ab65dc2da1742eb86ec636c50c7018385b68167 (patch)
treec4fd556aca9b867cfa1f2f174128c30857353884 /aoc2022/day-10/day-10.rkt
parentfafbeaf9e3c09ba7a5bea7e47d5736001f8a5aa1 (diff)
downloadgleam_aoc-8ab65dc2da1742eb86ec636c50c7018385b68167.tar.gz
gleam_aoc-8ab65dc2da1742eb86ec636c50c7018385b68167.zip
prep for 2023, renaming for consistency
Diffstat (limited to 'aoc2022/day-10/day-10.rkt')
-rw-r--r--aoc2022/day-10/day-10.rkt43
1 files changed, 43 insertions, 0 deletions
diff --git a/aoc2022/day-10/day-10.rkt b/aoc2022/day-10/day-10.rkt
new file mode 100644
index 0000000..70c80d3
--- /dev/null
+++ b/aoc2022/day-10/day-10.rkt
@@ -0,0 +1,43 @@
+#lang racket
+
+(require advent-of-code
+ threading
+ fancy-app
+ (only-in algorithms chunks-of))
+
+(define/match (process-instruction _)
+ [((list "noop")) (list 'noop)]
+ [((list "addx" (app string->number val))) (list 'noop (cons 'addx val))])
+
+(define instructions
+ (~> (fetch-aoc-input (find-session) 2022 10)
+ (string-split "\n")
+ (map (λ~> string-split process-instruction) _)
+ (apply append _)))
+
+;; part 1
+(define interesting-times (inclusive-range 20 220 40))
+
+(define/match (evaluate-instruction _op acc)
+ [('noop _) acc]
+ [((cons 'addx n) _) (+ acc n)])
+
+(for/fold ([acc 1] [interesting-strengths 0] #:result interesting-strengths)
+ ([inst (in-list instructions)] [i (in-naturals 1)])
+ (define new-interesting
+ (if (member i interesting-times) (+ interesting-strengths (* i acc)) interesting-strengths))
+ (values (evaluate-instruction inst acc) new-interesting))
+
+;; part 2
+(for/fold ([acc 1] [pixels '()] #:result (~> pixels reverse (chunks-of 40) (map (apply string _) _)))
+ ([inst (in-list instructions)] [i (in-naturals)])
+ (define new-pixel (if (member (modulo i 40) (list (sub1 acc) acc (add1 acc))) #\█ #\space))
+ (values (evaluate-instruction inst acc) (cons new-pixel pixels)))
+
+; for my data set,
+; '("███ ████ ████ █ █ ████ ████ █ █ ██ "
+; "█ █ █ █ █ █ █ █ █ █ █ █ "
+; "█ █ █ ███ ██ ███ ███ ████ █ █ "
+; "███ █ █ █ █ █ █ █ █ ████ "
+; "█ █ █ █ █ █ █ █ █ █ █ █ "
+; "█ █ ████ ████ █ █ ████ █ █ █ █ █ ")