-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday15.janet
43 lines (40 loc) · 1.41 KB
/
day15.janet
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
33
34
35
36
37
38
39
40
41
42
43
(defn aoc-hash [t]
(var res 0)
(def asciied (string/bytes t))
(each as asciied
(set res (% (* (+ res as) 17) 256)))
res)
(defn proceed [box el]
(def isequal (nil?(string/find "-" el)))
(if (true? isequal)
(let [params (string/split "=" el)
lab (params 0)
len (params 1)
boxn (aoc-hash (params 0))
arr (get box boxn)]
(if (nil? arr)
(set (box boxn) @[@{:label lab :lens len}])
(let [idx (find-index |(= ($ :label) (params 0)) arr)]
(if (not(nil? idx))
(do(array/remove (box boxn) idx)
(array/insert (box boxn) idx @{:label lab :lens len}))
(array/push (box boxn) @{:label lab :lens len})))))
(let [params (string/split "-" el)
lab (params 0)
boxn (aoc-hash lab)
arr (get box boxn)]
(if (not(nil? arr))
(let [idx (find-index |(= ($ :label) lab) arr)]
(if (not(nil? idx)) (array/remove (box boxn) idx))
))))
box)
(defn focusing-power [xs]
(var res 0)
(loop [[box lens] :pairs xs]
(var i 0)
(each el lens
(+= res (* (+ box 1) (+= i 1) (scan-number(el :lens))))))
res)
(defn main [&]
(let [input (string/split ","(string/trim (slurp "inputs/day15")))]
(print "Day15 : " (sum (map aoc-hash input)) " " (focusing-power (reduce proceed @{} input)))))