48 lines
999 B
Go

package day14
import (
"strings"
)
func Run(dat []byte) (int64, int64) {
lines := strings.Split(string(dat), "\n")
template := lines[0]
patterns := lines[2 : len(lines) - 1]
pairInsertions := make(map[string]string, len(patterns))
for i := 0; i < len(patterns); i++ {
pairSplit := strings.Split(patterns[i], " ")
pairInsertions[pairSplit[0]] = pairSplit[2]
}
for round := 0; round < 40; round++ {
newTemplate := string(template[0])
for i := 0; i < len(template) - 1; i++ {
pair := template[i:i + 2]
newLetter := pairInsertions[pair]
newTemplate += newLetter + string(pair[1])
}
template = newTemplate
}
letterMap := make(map[byte]int64, 0)
for i := 0; i < len(template); i++ {
letterMap[template[i]] += 1
}
highest := int64(0)
lowest := int64(999999)
for _, v := range letterMap {
if v > highest {
highest = v
} else if v < lowest {
lowest = v
}
}
return (highest - lowest), 0
}