aoc

Advent of Code Solutions
git clone git://git.alexkarle.com.com/aoc
Log | Files | Refs | README | LICENSE

commit 99505278327f387fc3e64392d46e32b3a23f9845 (patch)
parent ad4f98207f7b1a6047dc3cb8c39a41d652e3dd29
Author: Alex Karle <alex@alexkarle.com>
Date:   Sun, 11 Dec 2022 01:10:43 -0500

day10: Add solution for pt 1 and 2

Diffstat:
A2022/10/input | 138+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A2022/10/sample | 146+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A2022/10/sample2 | 3+++
A2022/10/sol.scm | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 344 insertions(+), 0 deletions(-)

diff --git a/2022/10/input b/2022/10/input @@ -0,0 +1,138 @@ +addx 1 +noop +addx 2 +noop +addx 3 +addx 3 +addx 1 +addx 5 +addx 1 +noop +noop +addx 4 +noop +noop +addx -9 +addx 16 +addx -1 +noop +addx 5 +addx -2 +addx 4 +addx -35 +addx 2 +addx 28 +noop +addx -23 +addx 3 +addx -2 +addx 2 +addx 5 +addx -8 +addx 19 +addx -8 +addx 2 +addx 5 +addx 5 +addx -14 +addx 12 +addx 2 +addx 5 +addx 2 +addx -13 +addx -23 +noop +addx 1 +addx 5 +addx -1 +addx 2 +addx 4 +addx -9 +addx 10 +noop +addx 6 +addx -11 +addx 12 +addx 5 +addx -25 +addx 30 +addx -2 +addx 2 +addx -5 +addx 12 +addx -37 +noop +noop +noop +addx 24 +addx -17 +noop +addx 33 +addx -32 +addx 3 +addx 1 +noop +addx 6 +addx -13 +addx 17 +noop +noop +noop +addx 12 +addx -4 +addx -2 +addx 2 +addx 3 +addx 4 +addx -35 +addx -2 +noop +addx 20 +addx -13 +addx -2 +addx 5 +addx 2 +addx 23 +addx -18 +addx -2 +addx 17 +addx -10 +addx 17 +noop +addx -12 +addx 3 +addx -2 +addx 2 +noop +addx 3 +addx 2 +noop +addx -13 +addx -20 +noop +addx 1 +addx 2 +addx 5 +addx 2 +addx 5 +noop +noop +noop +noop +noop +addx 1 +addx 2 +addx -18 +noop +addx 26 +addx -1 +addx 6 +noop +noop +noop +addx 4 +addx 1 +noop +noop +noop +noop diff --git a/2022/10/sample b/2022/10/sample @@ -0,0 +1,146 @@ +addx 15 +addx -11 +addx 6 +addx -3 +addx 5 +addx -1 +addx -8 +addx 13 +addx 4 +noop +addx -1 +addx 5 +addx -1 +addx 5 +addx -1 +addx 5 +addx -1 +addx 5 +addx -1 +addx -35 +addx 1 +addx 24 +addx -19 +addx 1 +addx 16 +addx -11 +noop +noop +addx 21 +addx -15 +noop +noop +addx -3 +addx 9 +addx 1 +addx -3 +addx 8 +addx 1 +addx 5 +noop +noop +noop +noop +noop +addx -36 +noop +addx 1 +addx 7 +noop +noop +noop +addx 2 +addx 6 +noop +noop +noop +noop +noop +addx 1 +noop +noop +addx 7 +addx 1 +noop +addx -13 +addx 13 +addx 7 +noop +addx 1 +addx -33 +noop +noop +noop +addx 2 +noop +noop +noop +addx 8 +noop +addx -1 +addx 2 +addx 1 +noop +addx 17 +addx -9 +addx 1 +addx 1 +addx -3 +addx 11 +noop +noop +addx 1 +noop +addx 1 +noop +noop +addx -13 +addx -19 +addx 1 +addx 3 +addx 26 +addx -30 +addx 12 +addx -1 +addx 3 +addx 1 +noop +noop +noop +addx -9 +addx 18 +addx 1 +addx 2 +noop +noop +addx 9 +noop +noop +noop +addx -1 +addx 2 +addx -37 +addx 1 +addx 3 +noop +addx 15 +addx -21 +addx 22 +addx -6 +addx 1 +noop +addx 2 +addx 1 +noop +addx -10 +noop +noop +addx 20 +addx 1 +addx 2 +addx 2 +addx -6 +addx -11 +noop +noop +noop diff --git a/2022/10/sample2 b/2022/10/sample2 @@ -0,0 +1,3 @@ +noop +addx 3 +addx -5 diff --git a/2022/10/sol.scm b/2022/10/sol.scm @@ -0,0 +1,57 @@ +#!/usr/local/bin/chicken-csi -ss +(import (chicken string) + (chicken io)) + +(define (parse-line l) + (let ((parts (string-split l))) + (cond ((equal? (car parts) "noop") + (list (string->symbol (car parts)))) + ((equal? (car parts) "addx") + (list (string->symbol (car parts)) + (string->number (cadr parts)))) + (else "Error: bad line" l)))) + +(define (simul cmds) + (let loop ((cmds cmds) (x 1)) + (if (null? cmds) + '() + (let ((cmd (car cmds))) + (cond ((eq? (car cmd) 'noop) + (cons x (loop (cdr cmds) x))) + ((eq? (car cmd) 'addx) + ; takes 2 counts, so append x THEN append x + val + (let ((x2 (+ (cadr cmd) x))) + (cons x (cons x2 (loop (cdr cmds) x2))))) + (else "Bad cmd " cmd)))))) + +; x is 3-wide, covers (x - 1, x, x + 1), (x + 39 , x + 40, x + 41), ... +(define (overlaps? x c) + ; NOTE: need to add 1 to X since cycle is 1 indexed + (>= 1 (abs (- (add1 x) (modulo c 40))))) + +(define (part-1 sim) + (let loop ((i 1) (sim sim) (count 0)) + ; (print (list i (car sim) count)) + (if (null? sim) + count + (if (= 0 (modulo (+ i 20) 40)) + (loop (add1 i) (cdr sim) (+ count (* i (car sim)))) + (loop (add1 i) (cdr sim) count))))) + +(define (part-2 sim) + (let loop ((i 0) (sim sim)) + (if (null? sim) + 'done + (begin + (and (= 0 (modulo i 40)) (newline)) + (if (overlaps? (car sim) (add1 i)) + (display "#") + (display " ")) + (loop (add1 i) (cdr sim)))))) + +(define (main args) + (let* ((lines (read-lines)) + (cmds (map parse-line lines)) + (x-vals (cons 1 (simul cmds)))) ; NOTE: need first val + (print (part-1 x-vals)) + (part-2 x-vals)))