29 lines
747 B
Racket
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))
|