improve day 7 perf again
This commit is contained in:
parent
a1018af799
commit
b6da4f8f81
@ -57,7 +57,7 @@ func parseBagStatement(bagStatement string) Bag {
|
|||||||
return Bag{color: bagColor, contents: bagContents, contentsCount: -1}
|
return Bag{color: bagColor, contents: bagContents, contentsCount: -1}
|
||||||
}
|
}
|
||||||
|
|
||||||
func bagContainsShinyGold(bagColor string, bagMap map[string]Bag) bool {
|
func bagContainsShinyGold(bagColor string, bagMap map[string]*Bag) bool {
|
||||||
bag := bagMap[bagColor]
|
bag := bagMap[bagColor]
|
||||||
if bag.containsShinyGold {
|
if bag.containsShinyGold {
|
||||||
return true
|
return true
|
||||||
@ -83,13 +83,13 @@ func Day07Part01(isTest bool) int {
|
|||||||
input := ReadInput("07", isTest)
|
input := ReadInput("07", isTest)
|
||||||
groups := strings.Split(input, "\n")
|
groups := strings.Split(input, "\n")
|
||||||
|
|
||||||
bags := make(map[string]Bag)
|
bags := make(map[string]*Bag)
|
||||||
bagColors := make([]string, len(groups))
|
bagColors := make([]string, len(groups))
|
||||||
|
|
||||||
// parse and collect the bags
|
// parse and collect the bags
|
||||||
for i, statement := range groups {
|
for i, statement := range groups {
|
||||||
parsedBag := parseBagStatement(statement)
|
parsedBag := parseBagStatement(statement)
|
||||||
bags[parsedBag.color] = parsedBag
|
bags[parsedBag.color] = &parsedBag
|
||||||
bagColors[i] = parsedBag.color
|
bagColors[i] = parsedBag.color
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ func Day07Part01(isTest bool) int {
|
|||||||
return shinyGoldContainers
|
return shinyGoldContainers
|
||||||
}
|
}
|
||||||
|
|
||||||
func countInnerBags(bag *Bag, bagMap map[string]Bag) int {
|
func countInnerBags(bag *Bag, bagMap map[string]*Bag) int {
|
||||||
if bag.contentsCount != -1 {
|
if bag.contentsCount != -1 {
|
||||||
return bag.contentsCount
|
return bag.contentsCount
|
||||||
}
|
}
|
||||||
@ -117,7 +117,7 @@ func countInnerBags(bag *Bag, bagMap map[string]Bag) int {
|
|||||||
nextBagCount := nextBagStruct.count
|
nextBagCount := nextBagStruct.count
|
||||||
nextBag := bagMap[nextBagStruct.color]
|
nextBag := bagMap[nextBagStruct.color]
|
||||||
|
|
||||||
innerBagsCount += nextBagCount + nextBagCount*countInnerBags(&nextBag, bagMap)
|
innerBagsCount += nextBagCount + nextBagCount*countInnerBags(nextBag, bagMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
return innerBagsCount
|
return innerBagsCount
|
||||||
@ -127,15 +127,15 @@ func Day07Part02(isTest bool) int {
|
|||||||
input := ReadInput("07", isTest)
|
input := ReadInput("07", isTest)
|
||||||
groups := strings.Split(input, "\n")
|
groups := strings.Split(input, "\n")
|
||||||
|
|
||||||
bags := make(map[string]Bag)
|
bags := make(map[string]*Bag)
|
||||||
|
|
||||||
// parse and collect the bags
|
// parse and collect the bags
|
||||||
for _, statement := range groups {
|
for _, statement := range groups {
|
||||||
parsedBag := parseBagStatement(statement)
|
parsedBag := parseBagStatement(statement)
|
||||||
bags[parsedBag.color] = parsedBag
|
bags[parsedBag.color] = &parsedBag
|
||||||
}
|
}
|
||||||
|
|
||||||
shinyGoldBag := bags["shiny gold"]
|
shinyGoldBag := bags["shiny gold"]
|
||||||
|
|
||||||
return countInnerBags(&shinyGoldBag, bags)
|
return countInnerBags(shinyGoldBag, bags)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user