advent-of-code/2019/day19/day19.rkt
2024-11-12 21:46:18 +01:00

29 lines
747 B
Racket

#lang racket/base
(require "../intcode.rkt")
(module+ test
(require rackunit))
(define (pulled? program x y)
(define vm (execute (start-machine program (list x y))))
(= 1 (car (machine-outputs vm))))
(define (part1 program)
(length (for*/list ([x (in-range 50)]
[y (in-range 50)]
#:when (pulled? program x y))
(list x y))))
(module+ test
(check-equal? (part1 (parse-file "input")) 229))
(define (part2 program)
(let loop ([x 0] [y 99])
(cond
[(not (pulled? program x y)) (loop (add1 x) y)]
[(pulled? program (+ x 99) (- y 99)) (+ (* 10000 x) (- y 99))]
[else (loop x (add1 y))])))
(module+ test
(check-equal? (part2 (parse-file "input")) 6950903))