29 lines
1.1 KiB
Racket
29 lines
1.1 KiB
Racket
#lang racket/base
|
|
|
|
(require "../intcode.rkt")
|
|
|
|
(module+ test
|
|
(require rackunit))
|
|
|
|
(define (part12 program input)
|
|
(define vm (execute (start-machine program (list input))))
|
|
(car (machine-outputs vm)))
|
|
|
|
(module+ test
|
|
(test-case "quine"
|
|
(define quine (parse "109,1,204,-1,1001,100,1,100,1008,100,16,101,1006,101,0,99"))
|
|
(define vm (execute (start-machine quine '())))
|
|
(check-true (machine-terminated vm))
|
|
(check-equal? (reverse (machine-outputs vm)) (vector->list quine)))
|
|
(test-case "16-digit number"
|
|
(define program (parse "1102,34915192,34915192,7,4,7,99,0"))
|
|
(define vm (execute (start-machine program '())))
|
|
(check-true (machine-terminated vm))
|
|
(check-equal? (string-length (number->string (car (machine-outputs vm)))) 16))
|
|
(test-case "large number"
|
|
(define program (parse "104,1125899906842624,99"))
|
|
(define vm (execute (start-machine program '())))
|
|
(check-true (machine-terminated vm))
|
|
(check-equal? (car (machine-outputs vm)) 1125899906842624))
|
|
(check-equal? (part12 (parse-file "input") 1) 3601950151)
|
|
(check-equal? (part12 (parse-file "input") 2) 64236))
|