mirror of
https://github.com/Ajetski/advent-of-code.git
synced 2025-09-30 03:03:17 -09:00
add 2019
This commit is contained in:
parent
63f5cf5d02
commit
a3ea8cfe49
1
.gitignore
vendored
1
.gitignore
vendored
@ -14,3 +14,4 @@
|
||||
## clojure stuff
|
||||
.clj-kondo
|
||||
.lsp
|
||||
.cpcache
|
||||
|
138
2019/src/day01.clj
Normal file
138
2019/src/day01.clj
Normal file
@ -0,0 +1,138 @@
|
||||
(ns day01)
|
||||
|
||||
(defn fuel-needed
|
||||
"calculates fuel needed for given mass"
|
||||
[mass]
|
||||
(max (-> mass
|
||||
(/ 3)
|
||||
long
|
||||
(- 2))
|
||||
0))
|
||||
|
||||
(defn total-fuel-needed
|
||||
"calculates total fuel needed accounting for weight of gas as well"
|
||||
([mass]
|
||||
(total-fuel-needed mass 0))
|
||||
([mass acc]
|
||||
(let [f (fuel-needed mass)]
|
||||
(if (= f 0)
|
||||
acc
|
||||
(recur f (+ acc f))))))
|
||||
|
||||
(comment
|
||||
(require '[clojure.string :as str])
|
||||
|
||||
; part 1
|
||||
(->> input
|
||||
str/split-lines
|
||||
(map parse-long)
|
||||
(map fuel-needed)
|
||||
(reduce +))
|
||||
|
||||
; part 2
|
||||
(->> input
|
||||
str/split-lines
|
||||
(map parse-long)
|
||||
(map total-fuel-needed)
|
||||
(reduce +))
|
||||
|
||||
(def input "83453
|
||||
89672
|
||||
81336
|
||||
74923
|
||||
71474
|
||||
117060
|
||||
55483
|
||||
116329
|
||||
123515
|
||||
99383
|
||||
80314
|
||||
108221
|
||||
128335
|
||||
72860
|
||||
139235
|
||||
127843
|
||||
140120
|
||||
63561
|
||||
68854
|
||||
109062
|
||||
146211
|
||||
59096
|
||||
123085
|
||||
105763
|
||||
127657
|
||||
142212
|
||||
111007
|
||||
100166
|
||||
63641
|
||||
59010
|
||||
108575
|
||||
93619
|
||||
144095
|
||||
74561
|
||||
95059
|
||||
145318
|
||||
81404
|
||||
96567
|
||||
91799
|
||||
92987
|
||||
107137
|
||||
87678
|
||||
126842
|
||||
85594
|
||||
116330
|
||||
104714
|
||||
128117
|
||||
132641
|
||||
75602
|
||||
90747
|
||||
69038
|
||||
67322
|
||||
146147
|
||||
147535
|
||||
83266
|
||||
85908
|
||||
124634
|
||||
51681
|
||||
104430
|
||||
56202
|
||||
68631
|
||||
69970
|
||||
116985
|
||||
140878
|
||||
125357
|
||||
126229
|
||||
66379
|
||||
103213
|
||||
108210
|
||||
73855
|
||||
130992
|
||||
113363
|
||||
82298
|
||||
111468
|
||||
110751
|
||||
52272
|
||||
103661
|
||||
122262
|
||||
114363
|
||||
80881
|
||||
65183
|
||||
125291
|
||||
100119
|
||||
56995
|
||||
101634
|
||||
55467
|
||||
136284
|
||||
107433
|
||||
95647
|
||||
71462
|
||||
133265
|
||||
104554
|
||||
62499
|
||||
61347
|
||||
68675
|
||||
123501
|
||||
113954
|
||||
135798
|
||||
80825
|
||||
128235"))
|
52
2019/src/day02.clj
Normal file
52
2019/src/day02.clj
Normal file
@ -0,0 +1,52 @@
|
||||
(ns day02)
|
||||
|
||||
(defn compute
|
||||
"takes in a tape & runs the program
|
||||
returns the state of tape when program halts"
|
||||
([tape]
|
||||
(compute 0 tape))
|
||||
([pos tape]
|
||||
(let [op (tape pos)]
|
||||
(if (= op 99)
|
||||
tape
|
||||
(let [arg1-slot (tape (inc pos))
|
||||
arg1-value (tape arg1-slot)
|
||||
arg2-slot (tape (+ pos 2))
|
||||
arg2-value (tape arg2-slot)
|
||||
return-slot (tape (+ pos 3))]
|
||||
(recur (+ pos 4)
|
||||
(assoc tape return-slot
|
||||
((condp = op
|
||||
1 +
|
||||
2 *)
|
||||
arg1-value arg2-value))))))))
|
||||
|
||||
(comment
|
||||
;; part 1
|
||||
(-> input
|
||||
(assoc 1 12)
|
||||
(assoc 2 2)
|
||||
compute
|
||||
(get 0))
|
||||
|
||||
;; part 2
|
||||
(->> (for [x (range 80)
|
||||
y (range 80)]
|
||||
(let [t (-> input
|
||||
(assoc 1 x)
|
||||
(assoc 2 y)
|
||||
compute)]
|
||||
{:noun (t 1)
|
||||
:verb (t 2)
|
||||
:val (t 0)}))
|
||||
(filter #(= (:val %) 19690720))
|
||||
(map (fn [{:keys [noun verb]}]
|
||||
(+ (* 100 noun) verb)))
|
||||
first)
|
||||
|
||||
;; set up input
|
||||
(let [raw-input "1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,13,1,19,1,10,19,23,1,6,23,27,1,5,27,31,1,10,31,35,2,10,35,39,1,39,5,43,2,43,6,47,2,9,47,51,1,51,5,55,1,5,55,59,2,10,59,63,1,5,63,67,1,67,10,71,2,6,71,75,2,6,75,79,1,5,79,83,2,6,83,87,2,13,87,91,1,91,6,95,2,13,95,99,1,99,5,103,2,103,10,107,1,9,107,111,1,111,6,115,1,115,2,119,1,119,10,0,99,2,14,0,0"]
|
||||
(require '[clojure.string :as str])
|
||||
(def input (->> (str/split raw-input #",")
|
||||
(mapv parse-long)))
|
||||
input))
|
Loading…
x
Reference in New Issue
Block a user