Files
adventofcode/2024/go/day03/day03.go
2024-12-03 07:24:42 +00:00

65 lines
1.3 KiB
Go

package day03
import (
"adventofcode2024/utils"
"fmt"
"regexp"
)
func Part1(input string) int {
val := 0
pattern := `mul\((\d{1,3}),(\d{1,3})\)`
re := regexp.MustCompile(pattern)
matches := re.FindAllStringSubmatch(input, -1)
fmt.Println("Matches found:")
for _, match := range matches {
if len(match) == 3 { // match[1] is x, match[2] is y
x := utils.MustAtoi(match[1])
y := utils.MustAtoi(match[2])
val += x * y
}
}
return val
}
func Part2(input string) int {
val := 0
pattern := `mul\((\d{1,3}),(\d{1,3})\)`
re := regexp.MustCompile(pattern)
matches := re.FindAllStringSubmatchIndex(input, -1)
fmt.Println("Matches found:")
for _, match := range matches {
if len(match) == 6 {
xStart, xEnd := match[2], match[3]
yStart, yEnd := match[4], match[5]
x := utils.MustAtoi(input[xStart:xEnd])
y := utils.MustAtoi(input[yStart:yEnd])
if do(input[:xStart]) {
val += x * y
}
}
}
return val
}
func do(input string) bool {
pattern := `don't\(\)|do\(\)`
re := regexp.MustCompile(pattern)
matches := re.FindAllString(input, -1)
if len(matches) > 0 {
// Get the last match
lastMatch := matches[len(matches)-1]
if lastMatch == "don't()" {
return false
} else if lastMatch == "do()" {
return true
}
}
return true
}