blob: 56019e80a4818ab44e65bc8661088bd031b95dfb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#lang racket
(require advent-of-code
threading)
(define initial-opcodes
(parameterize ([current-readtable (make-readtable #f #\, #\space #f)])
(port->list read (open-aoc-input (find-session) 2019 2 #:cache #true))))
;; part 1
(define (edit-opcode ocs oc-1 oc-2)
(~> ocs (list-set 1 oc-1) (list-set 2 oc-2)))
(define (run-intcode ocs)
(for/fold ([ocs ocs] #:result (car ocs))
([pointer (in-range 0 (length initial-opcodes) 4)] #:break (= 99 (list-ref ocs pointer)))
(define op
(match (list-ref ocs pointer)
[1 +]
[2 *]))
(list-set ocs
(list-ref ocs (+ 3 pointer))
(op (list-ref ocs (list-ref ocs (+ 1 pointer)))
(list-ref ocs (list-ref ocs (+ 2 pointer)))))))
(~> initial-opcodes (edit-opcode 12 2) run-intcode)
;; part 2
(for*/first ([noun (inclusive-range 0 99)]
[verb (inclusive-range 0 99)]
#:when (~> initial-opcodes (edit-opcode noun verb) run-intcode (= 19690720)))
(+ (* 100 noun) verb))
|