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