aboutsummaryrefslogtreecommitdiff
path: root/racket/aoc2022/day-10/day-10.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'racket/aoc2022/day-10/day-10.rkt')
-rw-r--r--racket/aoc2022/day-10/day-10.rkt43
1 files changed, 43 insertions, 0 deletions
diff --git a/racket/aoc2022/day-10/day-10.rkt b/racket/aoc2022/day-10/day-10.rkt
new file mode 100644
index 0000000..70c80d3
--- /dev/null
+++ b/racket/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,
+; '("███ ████ ████ █ █ ████ ████ █ █ ██ "
+; "█ █ █ █ █ █ █ █ █ █ █ █ "
+; "█ █ █ ███ ██ ███ ███ ████ █ █ "
+; "███ █ █ █ █ █ █ █ █ ████ "
+; "█ █ █ █ █ █ █ █ █ █ █ █ "
+; "█ █ ████ ████ █ █ ████ █ █ █ █ █ ")