2019 d01 & d02
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
|
Reference in New Issue