This commit is contained in:
Jonathan Chan 2022-12-10 01:19:42 -05:00
parent 22af467a17
commit 9f876a4fed
3 changed files with 195 additions and 0 deletions

138
input/10.txt Normal file
View File

@ -0,0 +1,138 @@
noop
noop
addx 5
addx 29
addx -28
addx 5
addx -1
noop
noop
addx 5
addx 12
addx -6
noop
addx 4
addx -1
addx 1
addx 5
addx -31
addx 32
addx 4
addx 1
noop
addx -38
addx 5
addx 2
addx 3
addx -2
addx 2
noop
addx 3
addx 2
addx 5
addx 2
addx 3
noop
addx 2
addx 3
noop
addx 2
addx -32
addx 33
addx -20
addx 27
addx -39
addx 1
noop
addx 5
addx 3
noop
addx 2
addx 5
noop
noop
addx -2
addx 5
addx 2
addx -16
addx 21
addx -1
addx 1
noop
addx 3
addx 5
addx -22
addx 26
addx -39
noop
addx 5
addx -2
addx 2
addx 5
addx 2
addx 23
noop
addx -18
addx 1
noop
noop
addx 2
noop
noop
addx 7
addx 3
noop
addx 2
addx -27
addx 28
addx 5
addx -11
addx -27
noop
noop
addx 3
addx 2
addx 5
addx 2
addx 27
addx -26
addx 2
addx 5
addx 2
addx 4
addx -3
addx 2
addx 5
addx 2
addx 3
addx -2
addx 2
noop
addx -33
noop
noop
noop
noop
addx 31
addx -26
addx 6
noop
noop
addx -1
noop
addx 3
addx 5
addx 3
noop
addx -1
addx 5
addx 1
addx -12
addx 17
addx -1
addx 5
noop
noop
addx 1
noop
noop

View File

@ -91,6 +91,14 @@
(define (show-solution part1 part2) (define (show-solution part1 part2)
(printf "Part 1: ~a\nPart 2: ~a\n" part1 part2)) (printf "Part 1: ~a\nPart 2: ~a\n" part1 part2))
;; show-solution* : (-> a) -> (-> b) -> void
;; Like show-solution, but parts 1 and 2 are thunks.
(define (show-solution* part1 part2)
(display "Part 1: ")
(displayln (part1))
(display "Part 2: ")
(displayln (part2)))
;; String helpers ;; ;; String helpers ;;

49
src/10.rkt Normal file
View File

@ -0,0 +1,49 @@
#lang curly-fn racket
(require "../lib.rkt")
(define input
(map ( (match-lambda
['("noop") 'noop]
[`("addx" ,n) (list 'addx (string->number n))])
#{string-split %1 " "})
(problem-input 10)))
(define (part1)
(define strengths 0)
(define (update! cycle X)
(when (zero? (% (- cycle 20) 40))
(set! strengths (+ strengths (* cycle X)))))
(for/fold ([X 1] [cycle 1]
#:result strengths)
([instr input])
(match instr
['noop
(update! cycle X)
(values X (add1 cycle))]
[`(addx ,n)
(update! cycle X)
(update! (add1 cycle) X)
(values (+ X n) (+ cycle 2))])))
(define (part2)
(define CRT (make-vector 240))
(define (update! pos X)
(if (<= (sub1 X) (% pos 40) (add1 X))
(vector-set! CRT pos #\█)
(vector-set! CRT pos #\ )))
(for/fold ([X 1] [pos 0])
([instr input])
(match instr
['noop
(update! pos X)
(values X (add1 pos))]
[`(addx ,n)
(update! pos X)
(update! (add1 pos) X)
(values (+ X n) (+ pos 2))]))
(displayln "See below.")
(for ([s (in-slice 40 CRT)])
(displayln (list->string s))))
(show-solution* part1 part2)