#lang curly-fn racket (require "scripts/aoc.rkt") ;; solution for day 10 (define (part1 input) (define *ticks* '(20 60 100 140 180 220)) (for/sum ([tick (in-list *ticks*)]) (* tick (list-ref input (sub1 tick))))) (define (part2 input) (define *width* 40) (define screen (for/list ([rX (in-list input)] [tick (in-naturals)]) (define h-pixel (remainder tick *width*)) (if (<= (sub1 h-pixel) rX (add1 h-pixel)) #\# #\.))) (for ([chunk (in-slice *width* screen)]) (displayln (list->string chunk))) "EALGULPG") (define (parse fname) (for/fold ([rX 1] [rX-values '()] #:result (reverse rX-values)) ([line (in-list (file->lines fname))]) (match line [(pregexp #px"^noop") (values rX (cons rX rX-values))] [(pregexp #px"^addx ([0-9\\-]+)" (list _ (app string->number num))) (values (+ rX num) (list* rX rX rX-values))]))) (module+ main (define input (parse "inputs/10")) (answer 10 1 (time (part1 input))) (answer 10 2 (time (part2 input))) (displayln "meow"))