mid-kid
11 months ago
4 changed files with 378 additions and 1 deletions
@ -0,0 +1,109 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"os" |
|||
"fmt" |
|||
"strings" |
|||
"strconv" |
|||
) |
|||
|
|||
type input []string |
|||
|
|||
func parse(f string) (seq input) { |
|||
seq = make(input, 0) |
|||
|
|||
for _, step := range strings.Split(f, ",") { |
|||
step = strings.TrimSpace(step) |
|||
seq = append(seq, step) |
|||
} |
|||
|
|||
return |
|||
} |
|||
|
|||
func hash(in string) (hash uint8) { |
|||
hash = 0 |
|||
for _, byt := range []byte(in) { |
|||
hash += byt |
|||
hash *= 17 |
|||
} |
|||
return |
|||
} |
|||
|
|||
func part1(seq input) (sum uint) { |
|||
for _, step := range seq { sum += uint(hash(step)) } |
|||
return |
|||
} |
|||
|
|||
type lens struct { |
|||
label string |
|||
focal uint64 |
|||
} |
|||
|
|||
func lens_find_label(arr []lens, label string) (pos int) { |
|||
for pos, val := range arr{ |
|||
if val.label == label { return pos } |
|||
} |
|||
return -1 |
|||
} |
|||
|
|||
func part2(seq input) (sum uint64) { |
|||
boxes := [256][]lens{} |
|||
for i := 0; i < 256; i++ { boxes[i] = make([]lens, 0) } |
|||
|
|||
for _, step := range seq { |
|||
var label string |
|||
var op byte |
|||
|
|||
var off int |
|||
if strings.Index(step, "=") >= 0 { |
|||
off = strings.Index(step, "=") |
|||
label = step[:off] |
|||
op = step[off] |
|||
} else if strings.Index(step, "-") >= 0 { |
|||
off = strings.Index(step, "-") |
|||
label = step[:off] |
|||
op = step[off] |
|||
} |
|||
|
|||
box := &boxes[hash(label)] |
|||
pos := lens_find_label(*box, label) |
|||
|
|||
switch op { |
|||
case '=': |
|||
focal, _ := strconv.ParseUint(step[off + 1:], 0, 64) |
|||
newlens := lens{ |
|||
label: label, |
|||
focal: focal, |
|||
} |
|||
if pos >= 0 { |
|||
(*box)[pos] = newlens |
|||
} else { |
|||
*box = append(*box, newlens) |
|||
} |
|||
|
|||
case '-': |
|||
if pos >= 0 { |
|||
*box = append((*box)[:pos], (*box)[pos + 1:]...) |
|||
} |
|||
} |
|||
} |
|||
|
|||
sum = 0 |
|||
for box_i, box := range boxes { |
|||
for lens_i, lens := range box { |
|||
fmt.Println(box_i + 1, ":", lens_i + 1, lens.label, lens.focal) |
|||
sum += uint64(1 + box_i) * uint64(1 + lens_i) * lens.focal |
|||
} |
|||
} |
|||
|
|||
return |
|||
} |
|||
|
|||
func main() { |
|||
file, _ := os.ReadFile(os.Args[1]) |
|||
f := string(file) |
|||
|
|||
in := parse(f) |
|||
fmt.Println(part1(in)) |
|||
fmt.Println(part2(in)) |
|||
} |
File diff suppressed because one or more lines are too long
@ -0,0 +1,267 @@ |
|||
517315 |
|||
1 : 1 rn 9 |
|||
2 : 1 qp 7 |
|||
2 : 2 jspd 5 |
|||
3 : 1 dck 9 |
|||
3 : 2 xxr 1 |
|||
4 : 1 bfk 4 |
|||
4 : 2 qbld 6 |
|||
5 : 1 btn 8 |
|||
6 : 1 jsh 3 |
|||
9 : 1 gksc 2 |
|||
9 : 2 kbxs 6 |
|||
11 : 1 bnz 4 |
|||
11 : 2 xqq 2 |
|||
12 : 1 cll 9 |
|||
13 : 1 fnll 8 |
|||
14 : 1 gf 7 |
|||
15 : 1 sfrs 9 |
|||
15 : 2 gqf 1 |
|||
15 : 3 tz 3 |
|||
16 : 1 tk 4 |
|||
17 : 1 npr 4 |
|||
18 : 1 dsz 9 |
|||
19 : 1 bp 6 |
|||
20 : 1 jgb 8 |
|||
21 : 1 scn 2 |
|||
21 : 2 sksc 4 |
|||
23 : 1 qtq 7 |
|||
24 : 1 bvlgl 1 |
|||
27 : 1 jp 4 |
|||
29 : 1 ht 8 |
|||
29 : 2 vtr 2 |
|||
31 : 1 vh 4 |
|||
31 : 2 ndl 5 |
|||
32 : 1 lvm 5 |
|||
34 : 1 dm 4 |
|||
34 : 2 cczqms 7 |
|||
35 : 1 lgdk 7 |
|||
37 : 1 bb 5 |
|||
38 : 1 ssrql 1 |
|||
39 : 1 gkd 4 |
|||
41 : 1 pvb 3 |
|||
42 : 1 tkln 3 |
|||
44 : 1 jq 5 |
|||
45 : 1 jb 1 |
|||
47 : 1 rfjtx 4 |
|||
47 : 2 vzck 5 |
|||
49 : 1 vrh 3 |
|||
50 : 1 tm 4 |
|||
50 : 2 gslk 7 |
|||
50 : 3 mdp 1 |
|||
51 : 1 tpxv 3 |
|||
52 : 1 cp 5 |
|||
52 : 2 dtk 6 |
|||
54 : 1 qhl 1 |
|||
54 : 2 qd 4 |
|||
54 : 3 ftqvd 5 |
|||
55 : 1 pf 9 |
|||
56 : 1 dqb 2 |
|||
57 : 1 bss 6 |
|||
57 : 2 pzpjt 8 |
|||
57 : 3 vqdgf 2 |
|||
58 : 1 tnvq 7 |
|||
58 : 2 bct 7 |
|||
58 : 3 zqn 2 |
|||
60 : 1 pjjg 7 |
|||
60 : 2 kp 6 |
|||
60 : 3 xsp 6 |
|||
61 : 1 zb 7 |
|||
61 : 2 dxfkdk 5 |
|||
63 : 1 xf 3 |
|||
64 : 1 sjr 8 |
|||
65 : 1 fz 3 |
|||
66 : 1 fsh 7 |
|||
67 : 1 tn 8 |
|||
69 : 1 rr 5 |
|||
70 : 1 bdqlrp 1 |
|||
71 : 1 xxv 6 |
|||
74 : 1 kqm 4 |
|||
77 : 1 kq 7 |
|||
78 : 1 vgp 3 |
|||
78 : 2 js 2 |
|||
78 : 3 kb 5 |
|||
79 : 1 xv 8 |
|||
81 : 1 ckr 8 |
|||
82 : 1 gj 3 |
|||
82 : 2 tgv 2 |
|||
84 : 1 nbs 1 |
|||
85 : 1 kcpf 3 |
|||
85 : 2 sq 7 |
|||
86 : 1 bpbrtk 3 |
|||
87 : 1 vhbv 4 |
|||
87 : 2 nnz 4 |
|||
91 : 1 nzr 6 |
|||
91 : 2 flh 9 |
|||
93 : 1 ptx 2 |
|||
95 : 1 jt 9 |
|||
95 : 2 zd 9 |
|||
96 : 1 djmd 6 |
|||
96 : 2 vvc 1 |
|||
96 : 3 xqv 7 |
|||
97 : 1 qnlmx 9 |
|||
97 : 2 fft 9 |
|||
98 : 1 pfnm 1 |
|||
99 : 1 vl 8 |
|||
99 : 2 gch 2 |
|||
99 : 3 dhv 5 |
|||
99 : 4 gk 5 |
|||
100 : 1 fcz 9 |
|||
100 : 2 fm 9 |
|||
101 : 1 tp 7 |
|||
101 : 2 fck 2 |
|||
101 : 3 rjh 4 |
|||
101 : 4 xdxdl 9 |
|||
102 : 1 dq 3 |
|||
102 : 2 sr 9 |
|||
103 : 1 rhl 7 |
|||
103 : 2 zhd 8 |
|||
105 : 1 qg 5 |
|||
105 : 2 nlhbd 4 |
|||
106 : 1 ctb 7 |
|||
107 : 1 hxj 1 |
|||
108 : 1 fkz 8 |
|||
111 : 1 zt 9 |
|||
112 : 1 kd 3 |
|||
114 : 1 hgfl 5 |
|||
114 : 2 sdjp 3 |
|||
114 : 3 mhl 4 |
|||
115 : 1 gsh 3 |
|||
117 : 1 fn 1 |
|||
120 : 1 ct 7 |
|||
121 : 1 jpgg 8 |
|||
122 : 1 nnm 1 |
|||
123 : 1 sct 8 |
|||
125 : 1 nn 2 |
|||
127 : 1 nhtt 1 |
|||
129 : 1 dlp 1 |
|||
129 : 2 lksf 7 |
|||
129 : 3 ffpd 9 |
|||
131 : 1 mscqn 7 |
|||
131 : 2 dkc 6 |
|||
131 : 3 hz 3 |
|||
132 : 1 hk 4 |
|||
132 : 2 kkm 1 |
|||
135 : 1 tr 2 |
|||
136 : 1 ds 5 |
|||
139 : 1 pz 2 |
|||
142 : 1 pgv 9 |
|||
143 : 1 tfjsg 3 |
|||
144 : 1 mb 4 |
|||
144 : 2 bcj 1 |
|||
145 : 1 rpn 6 |
|||
145 : 2 zv 3 |
|||
147 : 1 jh 1 |
|||
147 : 2 dks 6 |
|||
148 : 1 dvsf 4 |
|||
149 : 1 jjnbp 4 |
|||
150 : 1 cjx 5 |
|||
151 : 1 jzr 5 |
|||
152 : 1 lmlbp 9 |
|||
153 : 1 mdg 9 |
|||
155 : 1 bx 8 |
|||
156 : 1 rfs 1 |
|||
158 : 1 gkk 5 |
|||
159 : 1 qfg 5 |
|||
159 : 2 fll 9 |
|||
159 : 3 np 7 |
|||
163 : 1 fbhr 3 |
|||
163 : 2 mjk 9 |
|||
163 : 3 kg 7 |
|||
164 : 1 vgf 4 |
|||
165 : 1 xl 6 |
|||
165 : 2 pzvd 7 |
|||
166 : 1 kzbvkm 5 |
|||
167 : 1 mgb 7 |
|||
169 : 1 hrxjl 7 |
|||
169 : 2 shm 7 |
|||
169 : 3 brcmt 1 |
|||
170 : 1 nqj 9 |
|||
171 : 1 sg 3 |
|||
173 : 1 bj 9 |
|||
175 : 1 rdx 4 |
|||
176 : 1 dpk 4 |
|||
179 : 1 lf 6 |
|||
180 : 1 kh 8 |
|||
180 : 2 snb 8 |
|||
181 : 1 jj 1 |
|||
181 : 2 znl 2 |
|||
181 : 3 vfx 5 |
|||
182 : 1 lfkx 1 |
|||
184 : 1 vq 3 |
|||
184 : 2 bklck 2 |
|||
185 : 1 zcgrr 8 |
|||
186 : 1 fc 4 |
|||
187 : 1 dv 2 |
|||
188 : 1 xkx 3 |
|||
188 : 2 sh 3 |
|||
189 : 1 clsz 5 |
|||
189 : 2 jhj 6 |
|||
191 : 1 ksld 4 |
|||
191 : 2 qnzqgm 6 |
|||
192 : 1 qlgk 1 |
|||
193 : 1 nqtm 3 |
|||
193 : 2 nszdq 5 |
|||
193 : 3 nr 1 |
|||
193 : 4 jdlf 5 |
|||
194 : 1 xvc 6 |
|||
194 : 2 mt 3 |
|||
195 : 1 rrtj 5 |
|||
195 : 2 lv 3 |
|||
196 : 1 mncnct 3 |
|||
197 : 1 hdpzn 4 |
|||
197 : 2 lll 7 |
|||
197 : 3 zj 8 |
|||
202 : 1 vc 1 |
|||
203 : 1 snrg 8 |
|||
204 : 1 lqpn 3 |
|||
205 : 1 hmg 5 |
|||
205 : 2 dh 3 |
|||
207 : 1 jvn 9 |
|||
207 : 2 bl 8 |
|||
207 : 3 zfn 5 |
|||
207 : 4 pkc 8 |
|||
209 : 1 lvbl 9 |
|||
209 : 2 csj 2 |
|||
210 : 1 ns 8 |
|||
212 : 1 zqh 8 |
|||
213 : 1 zz 5 |
|||
213 : 2 vmcrl 6 |
|||
214 : 1 fxg 3 |
|||
218 : 1 xxjmjx 7 |
|||
218 : 2 gfjb 4 |
|||
218 : 3 vs 5 |
|||
220 : 1 frs 2 |
|||
222 : 1 jxhfcj 3 |
|||
224 : 1 qn 7 |
|||
226 : 1 mstm 9 |
|||
226 : 2 fmn 6 |
|||
227 : 1 fvsc 2 |
|||
228 : 1 bsn 5 |
|||
228 : 2 qjvtkc 2 |
|||
228 : 3 zljxk 9 |
|||
230 : 1 kz 4 |
|||
230 : 2 klfh 9 |
|||
231 : 1 smv 2 |
|||
231 : 2 kk 4 |
|||
232 : 1 jm 1 |
|||
232 : 2 mxr 4 |
|||
234 : 1 rmj 8 |
|||
235 : 1 gs 1 |
|||
236 : 1 mfh 8 |
|||
236 : 2 thmb 4 |
|||
239 : 1 sk 3 |
|||
240 : 1 cl 2 |
|||
240 : 2 prpm 7 |
|||
241 : 1 tkqp 9 |
|||
243 : 1 srm 2 |
|||
247 : 1 zzjx 2 |
|||
247 : 2 ptr 7 |
|||
251 : 1 xb 5 |
|||
252 : 1 ckm 4 |
|||
252 : 2 grr 5 |
|||
253 : 1 vdb 3 |
|||
254 : 1 mtl 2 |
|||
254 : 2 lgj 3 |
|||
255 : 1 frf 3 |
|||
247763 |
Loading…
Reference in new issue