day 14
parent
3d524f518e
commit
0eb76944c1
@ -0,0 +1,102 @@
|
||||
CKKOHNSBPCPCHVNKHFFK
|
||||
|
||||
KO -> C
|
||||
SO -> S
|
||||
BF -> V
|
||||
VN -> B
|
||||
OV -> K
|
||||
VH -> O
|
||||
KV -> N
|
||||
KB -> F
|
||||
NB -> C
|
||||
HS -> K
|
||||
PF -> B
|
||||
HB -> N
|
||||
OC -> H
|
||||
FS -> F
|
||||
VV -> S
|
||||
KF -> C
|
||||
FN -> F
|
||||
KP -> S
|
||||
HO -> N
|
||||
NH -> K
|
||||
OO -> S
|
||||
FB -> C
|
||||
BP -> F
|
||||
CH -> N
|
||||
SN -> O
|
||||
KN -> B
|
||||
CV -> O
|
||||
CC -> B
|
||||
VB -> C
|
||||
PH -> V
|
||||
CO -> K
|
||||
KS -> K
|
||||
BK -> N
|
||||
FH -> S
|
||||
PV -> H
|
||||
CB -> P
|
||||
FO -> F
|
||||
BB -> K
|
||||
OB -> C
|
||||
HH -> F
|
||||
ON -> O
|
||||
FK -> B
|
||||
NF -> F
|
||||
SV -> F
|
||||
CP -> H
|
||||
SS -> B
|
||||
OP -> H
|
||||
NS -> O
|
||||
HK -> N
|
||||
BC -> P
|
||||
NV -> V
|
||||
VS -> F
|
||||
PC -> V
|
||||
CS -> F
|
||||
NP -> V
|
||||
PS -> F
|
||||
VC -> F
|
||||
KK -> S
|
||||
PO -> P
|
||||
HF -> H
|
||||
KC -> P
|
||||
SF -> N
|
||||
BV -> N
|
||||
FF -> V
|
||||
FV -> V
|
||||
BO -> N
|
||||
OS -> C
|
||||
OF -> H
|
||||
CN -> S
|
||||
NO -> O
|
||||
NC -> B
|
||||
VK -> C
|
||||
HN -> B
|
||||
PK -> N
|
||||
SK -> S
|
||||
HV -> F
|
||||
BH -> B
|
||||
OK -> S
|
||||
VO -> B
|
||||
BS -> H
|
||||
PP -> N
|
||||
SC -> K
|
||||
BN -> P
|
||||
FC -> S
|
||||
SB -> B
|
||||
SH -> H
|
||||
NN -> V
|
||||
NK -> N
|
||||
VF -> H
|
||||
CF -> F
|
||||
PB -> C
|
||||
SP -> P
|
||||
KH -> C
|
||||
VP -> N
|
||||
CK -> H
|
||||
HP -> P
|
||||
FP -> B
|
||||
HC -> O
|
||||
PN -> F
|
||||
OH -> H
|
@ -0,0 +1,79 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
file, err := os.Open("input.txt")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
scanner.Split(bufio.ScanLines)
|
||||
|
||||
insertions := make(map[string]string)
|
||||
pairs := make(map[string]uint64)
|
||||
|
||||
var i int
|
||||
var template string
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
if line == "" {
|
||||
continue
|
||||
}
|
||||
if i == 0 {
|
||||
template = line
|
||||
for j := 0; j < len(template)-1; j++ {
|
||||
pairs[string(template[j])+string(template[j+1])]++
|
||||
}
|
||||
} else {
|
||||
var one, two, three rune
|
||||
fmt.Sscanf(line, "%c%c -> %c", &one, &two, &three)
|
||||
insertions[string(one)+string(two)] = string(three)
|
||||
}
|
||||
i++
|
||||
}
|
||||
|
||||
var newPairs map[string]uint64
|
||||
|
||||
for j := 0; j < 40; j++ {
|
||||
newPairs = make(map[string]uint64)
|
||||
for pair, count := range pairs {
|
||||
firstNewPair := string(pair[0]) + insertions[pair]
|
||||
secondNewPair := insertions[pair] + string(pair[1])
|
||||
newPairs[firstNewPair] += uint64(count)
|
||||
newPairs[secondNewPair] += uint64(count)
|
||||
}
|
||||
pairs = newPairs
|
||||
if j == 9 {
|
||||
fmt.Println(count(&pairs))
|
||||
}
|
||||
}
|
||||
fmt.Println(count(&pairs))
|
||||
}
|
||||
|
||||
func count(pairs *map[string]uint64) uint64 {
|
||||
counts := make(map[string]uint64)
|
||||
for pair, count := range *pairs {
|
||||
counts[string(pair[1])] += uint64(count)
|
||||
}
|
||||
|
||||
var maxCount, minCount uint64 = 0, 0xffffffffffffffff
|
||||
|
||||
for _, total := range counts {
|
||||
if total > maxCount {
|
||||
maxCount = total
|
||||
}
|
||||
if total < minCount {
|
||||
minCount = total
|
||||
}
|
||||
}
|
||||
|
||||
return maxCount - minCount
|
||||
}
|
Loading…
Reference in New Issue