48 lines
999 B
Go
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
|
|
}
|