From 199b6502b2d3b1273dd881999d80cb800a86474c Mon Sep 17 00:00:00 2001 From: Karl Spickermann Date: Tue, 14 Dec 2021 18:24:48 +0100 Subject: [PATCH] Day14 --- src/day14/day14.go | 63 ++++++++++++++++++++++++ src/day14/day14Input.txt | 102 +++++++++++++++++++++++++++++++++++++++ src/day14/day14Test.txt | 18 +++++++ 3 files changed, 183 insertions(+) create mode 100644 src/day14/day14.go create mode 100644 src/day14/day14Input.txt create mode 100644 src/day14/day14Test.txt diff --git a/src/day14/day14.go b/src/day14/day14.go new file mode 100644 index 0000000..36f884c --- /dev/null +++ b/src/day14/day14.go @@ -0,0 +1,63 @@ +package main + +import ( + "AOC2021/src/helper" + "fmt" + "os" + "strings" +) + +func main() { + args := os.Args[1:] + input, err := helper.GetInput(args[0]) + if err != nil { + fmt.Println(err) + } + startPolymer := input[0] + insertionRuleMap := make(map[string]rune) + for _, row := range input[2:] { + splitRow := strings.Split(row, " -> ") + insertionRuleMap[splitRow[0]] = rune(splitRow[1][0]) + } + runeMap := make(map[rune]int) + pairMap := make(map[string]int) + for i := 0; i < len(startPolymer); i++ { + if i < len(startPolymer)-1 { + pairMap[startPolymer[i:i+2]]++ + } + runeMap[rune(startPolymer[i])]++ + } + for i := 0; i < 10; i++ { + pairMap = insert(pairMap, insertionRuleMap, &runeMap) + } + calculateResultNumber(runeMap, 99999) + for i := 0; i < 30; i++ { + pairMap = insert(pairMap, insertionRuleMap, &runeMap) + } + calculateResultNumber(runeMap, 99999999999999) +} + +func calculateResultNumber(runeMap map[rune]int, minAmountDefault int) { + maxAmount := 0 + minAmount := minAmountDefault + for _, val := range runeMap { + if val > maxAmount { + maxAmount = val + } + if val < minAmount { + minAmount = val + } + } + fmt.Println(maxAmount - minAmount) +} + +func insert(pairMap map[string]int, insertionRuleMap map[string]rune, runeMap *map[rune]int) map[string]int { + newPairmap := make(map[string]int) + for pair, amount := range pairMap { + insertionValue := insertionRuleMap[pair] + (*runeMap)[insertionValue] += amount + newPairmap[string(insertionValue)+pair[1:]] += amount + newPairmap[pair[:1]+string(insertionValue)] += amount + } + return newPairmap +} diff --git a/src/day14/day14Input.txt b/src/day14/day14Input.txt new file mode 100644 index 0000000..5554b06 --- /dev/null +++ b/src/day14/day14Input.txt @@ -0,0 +1,102 @@ +KFVHFSSVNCSNHCPCNPVO + +KS -> O +SP -> V +OH -> F +VC -> P +BO -> S +CV -> H +FO -> N +KV -> V +OV -> B +NB -> K +FS -> F +KB -> N +HK -> C +VP -> B +SV -> S +FP -> P +BS -> B +BP -> K +OS -> K +PB -> C +HB -> H +VN -> S +FB -> C +OC -> N +OO -> F +PC -> O +FK -> K +OP -> V +BH -> C +NP -> C +KF -> H +SK -> F +HN -> O +CB -> O +SN -> N +VF -> S +KC -> H +HF -> V +NC -> P +BN -> F +KO -> C +PS -> B +HO -> S +CH -> O +KP -> K +VK -> V +BB -> V +BF -> P +CS -> K +CN -> H +PK -> C +SH -> O +BC -> H +FN -> N +BK -> N +PN -> B +PO -> O +SC -> S +NO -> S +KN -> O +VB -> C +SF -> H +FH -> C +FF -> B +VO -> S +PH -> F +CK -> B +FC -> P +VV -> F +VH -> O +OF -> O +HP -> K +CO -> V +VS -> V +SB -> F +SS -> K +CF -> O +OK -> V +ON -> B +NS -> H +SO -> B +NV -> V +NH -> B +NN -> K +KH -> H +FV -> B +KK -> N +OB -> F +NK -> F +CC -> S +PP -> B +PF -> H +HC -> P +PV -> F +BV -> N +NF -> N +HV -> S +HH -> C +HS -> O +CP -> O \ No newline at end of file diff --git a/src/day14/day14Test.txt b/src/day14/day14Test.txt new file mode 100644 index 0000000..6c1c3a1 --- /dev/null +++ b/src/day14/day14Test.txt @@ -0,0 +1,18 @@ +NNCB + +CH -> B +HH -> N +CB -> H +NH -> C +HB -> C +HC -> B +HN -> C +NN -> C +BH -> H +NC -> B +NB -> B +BN -> B +BB -> N +BC -> B +CC -> N +CN -> C \ No newline at end of file