Browse Source

day 15

master
mid-kid 11 months ago
parent
commit
6f001e609e
  1. 2
      Makefile
  2. 109
      d15.go
  3. 1
      d15_input.txt
  4. 267
      d15_ok.txt

2
Makefile

@ -1,6 +1,6 @@
progs_sh := d01
progs_py := d02 d04
progs_go := d05
progs_go := d05 d15
progs := $(progs_sh) $(progs_py) $(progs_go)

109
d15.go

@ -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))
}

1
d15_input.txt

File diff suppressed because one or more lines are too long

267
d15_ok.txt

@ -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…
Cancel
Save