mirror of
https://github.com/onyx-and-iris/aoc2023.git
synced 2024-11-21 18:00:47 +00:00
47 lines
897 B
Go
47 lines
897 B
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/elliotchance/orderedmap/v2"
|
|
)
|
|
|
|
var boxes = map[int]*orderedmap.OrderedMap[string, int]{}
|
|
|
|
// two returns the sum of all lense configurations
|
|
func two(lines []string) int {
|
|
hash := newHasher()
|
|
|
|
for _, lense := range lenses {
|
|
label, focalLength := func() (string, int) {
|
|
x := strings.Split(lense, "=")
|
|
if len(x) == 2 {
|
|
return x[0], mustConv(x[1])
|
|
}
|
|
return strings.TrimRight(x[0], "-"), 0
|
|
}()
|
|
boxId := hash.run(label)
|
|
|
|
_, ok := boxes[boxId]
|
|
if !ok {
|
|
boxes[boxId] = orderedmap.NewOrderedMap[string, int]()
|
|
}
|
|
|
|
if strings.Contains(lense, "=") {
|
|
boxes[boxId].Set(label, focalLength)
|
|
} else {
|
|
boxes[boxId].Delete(label)
|
|
}
|
|
}
|
|
|
|
sum := 0
|
|
for id, box := range boxes {
|
|
for index, lense := range box.Keys() {
|
|
focalLength, _ := box.Get(lense)
|
|
sum += (id + 1) * (index + 1) * focalLength
|
|
}
|
|
}
|
|
|
|
return sum
|
|
}
|