2019 d01 & d02

master
Matthew Butterick 5 years ago
parent 9130a74af7
commit 0e5d9eca75

@ -0,0 +1,20 @@
#lang br
(require racket/file rackunit)
(define (fuel-required mass) (- (floor (/ mass 3)) 2))
(define masses
(for/list ([ln (in-port read (open-input-file "01.rktd"))])
ln))
;; 1
(check-eq? (apply + (map fuel-required masses)) 3167282)
(define (recursive-fuel mass [acc 0])
(match (fuel-required mass)
[(? positive? fuel)
(recursive-fuel fuel (+ acc fuel))]
[else acc]))
;; 2
(check-eq? (apply + (map recursive-fuel masses)) 4748063)

@ -0,0 +1,100 @@
143754
83242
124730
62796
128187
68925
60687
68800
112450
70696
94653
62124
82251
91514
79895
82973
71678
141671
88243
109553
135097
78026
100048
52113
109934
92274
62821
138384
90112
114684
137383
71727
143236
79842
101187
71202
131156
128805
105102
71319
88615
62024
126027
55321
91226
75020
136689
70265
97850
96536
135311
64962
87137
50402
70604
56879
60016
98231
136635
64590
143522
112152
142511
95350
83483
123681
123792
99044
139282
96610
116844
50416
110682
55137
69795
100411
110119
141558
90780
108063
102247
85487
107174
79009
131908
95164
120588
62031
51070
63773
128565
96458
91388
54345
52840
130519
51357
146851
68455
102463

@ -0,0 +1,36 @@
#lang br
(require racket/file rackunit)
(define (string->regs str)
(list->vector (map string->number (string-split str ","))))
(define (solve regs)
(define (deref ptr) (vector-ref regs ptr))
(let loop ([ptr 0])
(match (vector-ref regs ptr)
[(and (or 1 2) opcode)
(vector-set! regs (deref (+ ptr 3))
((match opcode [1 +][_ *])
(deref (deref (+ ptr 1)))
(deref (deref (+ ptr 2)))))
(loop (+ ptr 4))]
[99 regs])))
(define test "1,1,1,4,99,5,6,0,99")
(check-equal? (solve (string->regs test)) '#(30 1 1 4 2 5 6 0 99))
(define (nv-result noun verb)
(define regs (string->regs (file->string "02.rktd")))
(vector-set*! regs 1 noun 2 verb)
(vector-ref (solve regs) 0))
;; 1
(check-eq? (nv-result 12 2) 6730673)
;; 2
(check-eq?
(for*/first ([noun (in-range 91)]
[verb (in-range 91)]
#:when (eq? (nv-result noun verb) 19690720))
(+ (* 100 noun) verb))
3749)

@ -0,0 +1 @@
1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,9,1,19,1,19,6,23,2,6,23,27,2,27,9,31,1,5,31,35,1,35,10,39,2,39,9,43,1,5,43,47,2,47,10,51,1,51,6,55,1,5,55,59,2,6,59,63,2,63,6,67,1,5,67,71,1,71,9,75,2,75,10,79,1,79,5,83,1,10,83,87,1,5,87,91,2,13,91,95,1,95,10,99,2,99,13,103,1,103,5,107,1,107,13,111,2,111,9,115,1,6,115,119,2,119,6,123,1,123,6,127,1,127,9,131,1,6,131,135,1,135,2,139,1,139,10,0,99,2,0,14,0