commit 81ed00b49a649173d75024d899c561dbdf260969 Author: Dustin Swan Date: Thu Dec 2 14:09:17 2021 -0500 Learning Racket. Day 1 and 2 of AOC2021 diff --git a/day1.rkt b/day1.rkt new file mode 100644 index 0000000..75d850f --- /dev/null +++ b/day1.rkt @@ -0,0 +1,48 @@ +#lang racket + +(define test-data (list +199 +200 +208 +210 +200 +207 +240 +269 +260 +263 +)) + +; part 1 +(define (sum data) + (cdr + (foldl (λ (el acc) + (let ([prev (car acc)] + [total (cdr acc)]) + (if (> el prev) + (cons el (+ 1 total)) + (cons el total)))) + (cons (car data) 0) + data))) + +(define part1 (sum test-data)) + +; part 2 +; fold over the data +; initial value will be a pair of 2 lists +; first list is the original list, 2nd is the new sliding window +(define sliding-window + (reverse + (cdr + (foldl (λ (el acc) + ;(writeln acc) ; debug + (let ([orig (car acc)] ; grab the rest of the original list from the accumulator + [window (cdr acc)] ; grab the window list that we have so far + [one (car (car acc))] ; first element of original list + [two (car (rest (car acc)))] + [three (car (rest (rest (car acc))))]) + (cons (rest orig) (cons (+ one two three) window)))) ; return a pair - first elem is the new window list. 2nd elem is the rest of the original list + (cons (append test-data (list 0 0)) empty) ; start with an empty window list an the original list. add 2 0s at the end to cheat + test-data)))) + +(define part2 (sum sliding-window)) \ No newline at end of file diff --git a/day2.rkt b/day2.rkt new file mode 100644 index 0000000..e5a2de8 --- /dev/null +++ b/day2.rkt @@ -0,0 +1,40 @@ +#lang racket + +(define file "day2.txt") + +(define lines (file->lines file)) + +(define steps (map string-split lines)) + +; part 1 + +(define (modify-position step position) + ; (writeln position) + (let ([instruction (car step)] + [magnitude (string->number (second step))] + [forwardness (car position)] + [depth (cdr position)]) + (cond [(equal? instruction "forward") (cons (+ forwardness magnitude) depth)] + [(equal? instruction "up") (cons forwardness (- depth magnitude))] + [(equal? instruction "down") (cons forwardness (+ depth magnitude))]))) + +(define position (foldl modify-position (cons 0 0) steps)) ; (forwardness, depth) + +(define part1 (* (car position) (cdr position))) + +; part 2 + +(define (modify-position2 step position) + ; (writeln position) + (let ([instruction (first step)] + [magnitude (string->number (second step))] + [forwardness (first position)] + [depth (second position)] + [aim (third position)]) + (cond [(equal? instruction "forward") (list (+ forwardness magnitude) (+ depth (* aim magnitude)) aim)] + [(equal? instruction "up") (list forwardness depth (- aim magnitude))] + [(equal? instruction "down") (list forwardness depth (+ aim magnitude))]))) + +(define position2 (foldl modify-position2 (list 0 0 0) steps)) ; (forwardness, depth, aim) + +(define part2 (* (first position2) (second position2))) \ No newline at end of file diff --git a/day2.test.txt b/day2.test.txt new file mode 100644 index 0000000..b7172ac --- /dev/null +++ b/day2.test.txt @@ -0,0 +1,6 @@ +forward 5 +down 5 +forward 8 +up 3 +down 8 +forward 2 diff --git a/day2.txt b/day2.txt new file mode 100644 index 0000000..b7b994b --- /dev/null +++ b/day2.txt @@ -0,0 +1,1000 @@ +forward 8 +forward 3 +forward 8 +down 6 +forward 3 +up 6 +down 3 +down 8 +down 5 +down 1 +down 4 +up 4 +forward 7 +forward 7 +down 8 +forward 8 +forward 2 +forward 4 +forward 6 +down 2 +forward 1 +down 2 +down 6 +up 4 +forward 4 +forward 4 +down 1 +down 1 +forward 8 +down 9 +forward 4 +down 4 +forward 9 +down 9 +forward 7 +forward 4 +forward 4 +down 7 +forward 9 +up 5 +forward 7 +forward 4 +up 5 +up 6 +down 9 +forward 3 +forward 3 +forward 5 +up 3 +forward 8 +down 9 +forward 3 +forward 5 +down 2 +forward 7 +forward 8 +forward 8 +up 3 +down 9 +forward 2 +forward 5 +forward 4 +up 1 +down 3 +forward 7 +forward 4 +up 3 +down 8 +up 8 +forward 7 +forward 7 +down 2 +down 7 +forward 3 +forward 1 +down 7 +down 4 +down 9 +forward 5 +down 9 +up 8 +down 9 +down 7 +forward 2 +down 5 +down 6 +forward 3 +forward 2 +forward 3 +forward 2 +down 4 +up 1 +forward 6 +down 2 +forward 2 +down 5 +up 1 +up 8 +forward 5 +forward 6 +up 8 +down 4 +forward 4 +down 3 +forward 5 +forward 5 +forward 8 +forward 3 +up 1 +down 9 +up 4 +up 5 +down 3 +down 9 +up 6 +down 1 +down 2 +down 3 +down 6 +up 5 +forward 9 +forward 6 +forward 6 +forward 4 +forward 7 +up 6 +down 2 +down 9 +down 9 +forward 4 +down 9 +forward 2 +down 4 +down 8 +down 3 +up 1 +down 2 +down 7 +down 1 +down 5 +up 5 +forward 3 +forward 2 +down 2 +up 4 +up 9 +forward 5 +up 9 +down 9 +forward 1 +down 4 +forward 6 +down 2 +forward 7 +forward 2 +down 6 +forward 9 +down 9 +down 8 +forward 7 +down 3 +down 3 +down 5 +forward 5 +up 9 +up 5 +down 1 +forward 9 +down 3 +down 6 +forward 3 +up 4 +up 1 +down 3 +down 1 +up 6 +forward 4 +up 4 +forward 5 +down 3 +down 5 +forward 4 +down 1 +up 6 +down 5 +forward 1 +forward 6 +down 5 +forward 1 +forward 4 +forward 2 +down 1 +down 3 +down 9 +down 9 +down 8 +forward 4 +down 5 +forward 6 +up 6 +down 3 +forward 1 +down 9 +forward 4 +down 2 +up 5 +down 4 +forward 1 +forward 2 +down 6 +forward 3 +down 9 +forward 6 +forward 1 +forward 7 +up 1 +up 7 +up 2 +forward 4 +up 3 +down 4 +up 1 +down 3 +forward 1 +down 5 +up 6 +forward 6 +forward 6 +up 3 +up 2 +down 8 +down 2 +down 2 +down 7 +forward 8 +up 2 +up 2 +up 5 +down 6 +up 3 +down 9 +forward 7 +down 7 +forward 8 +forward 2 +forward 5 +up 5 +up 1 +forward 5 +up 2 +up 3 +up 2 +up 3 +down 3 +down 2 +forward 1 +up 1 +down 4 +up 8 +forward 5 +down 9 +forward 8 +up 1 +forward 7 +forward 7 +up 7 +up 6 +up 6 +down 5 +down 3 +up 4 +up 1 +down 9 +down 9 +forward 4 +down 7 +forward 2 +forward 8 +forward 1 +down 9 +forward 2 +forward 5 +up 5 +down 5 +down 6 +forward 1 +down 4 +forward 9 +up 3 +down 4 +forward 7 +forward 1 +forward 3 +forward 6 +down 1 +forward 3 +up 5 +up 6 +down 3 +forward 5 +forward 8 +forward 4 +down 9 +forward 2 +forward 4 +down 8 +forward 6 +down 7 +up 7 +forward 1 +down 8 +forward 5 +forward 7 +up 3 +forward 7 +forward 2 +up 5 +forward 3 +down 4 +up 5 +down 6 +up 6 +forward 6 +up 1 +up 7 +up 8 +forward 4 +down 6 +down 8 +up 8 +down 2 +forward 3 +forward 9 +down 9 +down 6 +down 2 +up 4 +forward 5 +forward 6 +forward 5 +down 5 +forward 5 +down 2 +down 9 +down 3 +down 4 +forward 2 +forward 7 +down 7 +down 2 +down 4 +down 8 +up 6 +down 7 +forward 2 +up 6 +forward 6 +down 4 +up 8 +forward 1 +up 2 +forward 6 +forward 7 +down 2 +down 4 +down 3 +down 2 +forward 5 +down 4 +forward 6 +forward 6 +down 8 +forward 7 +forward 1 +forward 1 +forward 4 +forward 7 +forward 8 +down 2 +forward 9 +up 7 +forward 1 +down 1 +forward 2 +forward 2 +up 4 +forward 3 +down 1 +down 4 +down 3 +forward 8 +forward 8 +forward 9 +forward 4 +down 6 +up 6 +up 7 +up 7 +down 1 +up 1 +up 9 +up 7 +down 9 +forward 4 +up 8 +down 5 +up 3 +down 2 +forward 4 +forward 6 +up 7 +up 2 +down 5 +down 3 +down 9 +forward 1 +down 1 +down 6 +down 3 +forward 9 +down 3 +up 6 +up 4 +up 6 +down 6 +up 7 +down 5 +up 4 +up 3 +up 3 +up 2 +forward 1 +forward 5 +forward 8 +down 2 +up 9 +forward 6 +forward 8 +up 3 +down 3 +forward 7 +forward 4 +down 7 +up 2 +down 1 +down 5 +forward 8 +down 6 +down 2 +down 9 +down 5 +up 7 +up 5 +forward 7 +down 8 +down 5 +forward 7 +up 5 +up 1 +down 4 +forward 1 +up 3 +forward 7 +forward 9 +down 7 +forward 4 +down 9 +down 2 +up 2 +forward 2 +down 6 +forward 3 +down 5 +up 8 +forward 5 +up 5 +forward 1 +down 4 +forward 7 +down 8 +forward 7 +up 2 +forward 1 +forward 2 +down 7 +forward 7 +forward 5 +up 3 +down 8 +forward 8 +up 6 +up 2 +forward 9 +down 7 +up 6 +down 1 +up 5 +forward 4 +forward 9 +forward 6 +forward 3 +forward 3 +forward 1 +forward 8 +down 6 +forward 3 +up 2 +up 6 +down 3 +down 7 +forward 5 +down 2 +up 9 +up 3 +down 1 +down 3 +up 7 +up 5 +down 6 +down 5 +up 2 +down 1 +down 2 +forward 1 +down 1 +forward 1 +down 1 +up 5 +up 4 +forward 1 +down 7 +forward 4 +down 6 +forward 2 +forward 1 +forward 4 +forward 9 +down 7 +forward 7 +down 7 +down 5 +forward 7 +forward 3 +forward 8 +up 4 +forward 9 +down 1 +down 9 +forward 3 +down 7 +forward 1 +forward 8 +up 7 +forward 5 +down 8 +forward 3 +forward 6 +forward 6 +up 5 +forward 7 +up 3 +down 9 +forward 4 +forward 4 +forward 1 +down 2 +down 9 +forward 8 +forward 8 +down 9 +forward 5 +up 4 +down 6 +forward 3 +up 4 +down 5 +down 2 +down 3 +down 2 +up 1 +up 9 +up 3 +forward 5 +forward 7 +down 1 +down 5 +up 1 +forward 8 +down 5 +forward 8 +forward 8 +down 2 +forward 2 +forward 7 +forward 3 +forward 6 +up 9 +down 3 +forward 7 +down 5 +forward 3 +up 1 +down 3 +down 9 +forward 5 +forward 5 +up 5 +down 3 +down 3 +up 1 +forward 6 +up 1 +up 6 +forward 5 +down 3 +down 9 +forward 1 +down 5 +up 5 +down 7 +down 7 +down 6 +down 2 +up 7 +down 3 +forward 2 +up 6 +down 2 +forward 6 +forward 9 +down 6 +down 4 +down 5 +down 7 +forward 9 +up 2 +down 2 +down 4 +forward 4 +down 9 +forward 3 +forward 8 +forward 6 +up 5 +down 2 +down 7 +forward 7 +up 6 +down 4 +up 8 +forward 2 +down 8 +forward 7 +up 8 +up 5 +up 8 +down 1 +forward 4 +forward 7 +down 5 +forward 1 +forward 5 +down 9 +down 6 +up 8 +up 5 +down 7 +down 4 +forward 4 +forward 2 +forward 4 +down 1 +up 4 +down 5 +down 4 +up 5 +forward 2 +up 3 +down 9 +down 1 +down 4 +up 1 +up 7 +down 5 +forward 9 +down 5 +down 7 +down 2 +down 8 +forward 7 +down 5 +down 6 +forward 3 +down 8 +down 5 +down 9 +up 6 +up 2 +down 9 +down 6 +down 7 +forward 8 +down 8 +forward 4 +up 8 +forward 3 +down 2 +up 2 +forward 4 +down 9 +down 2 +up 6 +down 4 +forward 6 +down 7 +forward 5 +forward 4 +down 3 +up 6 +forward 7 +forward 1 +up 6 +down 6 +forward 5 +forward 3 +down 8 +up 8 +up 8 +forward 5 +forward 1 +up 1 +forward 3 +up 6 +forward 2 +down 8 +forward 8 +up 8 +forward 1 +forward 6 +forward 8 +up 7 +up 3 +forward 8 +forward 5 +down 4 +down 4 +forward 8 +up 1 +forward 5 +down 9 +forward 2 +down 2 +down 3 +forward 1 +down 2 +up 3 +down 1 +up 1 +up 1 +forward 8 +forward 5 +forward 2 +up 1 +down 9 +up 7 +down 1 +forward 9 +up 4 +forward 5 +forward 5 +forward 8 +down 1 +forward 3 +forward 4 +forward 8 +up 2 +forward 5 +down 8 +forward 5 +up 7 +forward 3 +forward 2 +forward 3 +up 7 +up 4 +up 9 +forward 7 +forward 1 +up 6 +up 5 +down 8 +forward 3 +down 5 +forward 7 +forward 3 +up 9 +forward 9 +forward 7 +up 2 +down 7 +forward 4 +down 9 +up 8 +up 3 +down 4 +down 1 +forward 4 +up 3 +down 6 +down 2 +forward 8 +up 1 +forward 5 +up 7 +down 5 +forward 9 +forward 6 +forward 9 +down 3 +up 8 +forward 6 +forward 4 +forward 2 +forward 2 +down 8 +up 5 +down 4 +down 6 +forward 3 +forward 6 +forward 1 +forward 3 +down 8 +down 5 +up 3 +down 1 +down 7 +forward 8 +forward 1 +down 6 +down 9 +forward 2 +up 5 +down 6 +up 6 +down 5 +down 8 +forward 1 +down 3 +forward 1 +forward 8 +forward 2 +down 4 +forward 1 +down 6 +down 6 +forward 3 +up 7 +forward 5 +up 1 +up 4 +forward 7 +forward 1 +down 5 +forward 2 +down 1 +forward 4 +forward 2 +forward 5 +up 2 +up 1 +forward 2 +down 4 +down 5 +forward 6 +forward 1 +down 7 +down 6 +down 2 +forward 5 +forward 6 +up 8 +up 6 +forward 2 +forward 6 +down 9 +down 4 +forward 1 +down 3 +down 1 +up 4 +down 8 +forward 3 +down 5 +up 4 +down 5 +up 3 +down 1 +down 1 +down 9 +forward 8 +up 8 +down 2 +forward 9 +down 8 +down 4 +up 4 +up 9 +up 4 +forward 8 +forward 9 +forward 3 +forward 2 +down 2 +forward 5 +down 6 +down 2 +down 9 +forward 3 +up 4 +forward 8 +up 9 +forward 2 +forward 1 +down 3 +up 1 +up 7 +down 3 +up 2 +down 2 +up 2 +forward 4 +down 7 +forward 2 +forward 4 +forward 3 +down 6 +forward 4 +down 3 +forward 2 +down 1 +up 4 +down 8 +up 3 +forward 4 +up 6 +forward 5 +forward 3 +forward 1 +up 2 +forward 4 +forward 7 +down 3 +forward 9 +up 7 +down 9 +forward 2 +forward 4 +down 9 +down 1 +up 3 +forward 2 +forward 7 +down 7 +forward 9 +forward 5 +forward 7 +forward 2 +forward 3 +forward 4 +forward 5 +forward 6 +down 1 +forward 8 +down 4 +down 6 +up 8 +up 5 +forward 5 +down 9 +down 2 +down 2 +forward 7 +forward 8 +up 8 +down 4 +up 5 +forward 1 +down 5 +forward 3 +up 3 +down 6 +forward 5 +up 3 +up 5 +forward 4 +forward 2 +up 6 +down 9 +forward 7