package day03 import ( "regexp" "strconv" ) func Part1(input string) int { total := 0 regex := regexp.MustCompile(`mul\((\d+),(\d+)\)`) matches := regex.FindAllStringSubmatch(input, -1) for _, match := range matches { if len(match) == 3 { x, _ := strconv.Atoi(match[1]) y, _ := strconv.Atoi(match[2]) total += x * y } } return total } func Part2(input string) int { total := 0 isEnabled := true mulRegex := regexp.MustCompile(`mul\((\d+),(\d+)\)`) doRegex := regexp.MustCompile(`do\(\)`) dontRegex := regexp.MustCompile(`don't\(\)`) tokenizeRegex := regexp.MustCompile(`(mul\(\d+,\d+\)|do\(\)|don't\(\))`) tokens := tokenizeRegex.FindAllString(input, -1) for _, token := range tokens { if doRegex.MatchString(token) { isEnabled = true } else if dontRegex.MatchString(token) { isEnabled = false } else if mulRegex.MatchString(token) && isEnabled { mulMatch := mulRegex.FindStringSubmatch(token) x, _ := strconv.Atoi(mulMatch[1]) y, _ := strconv.Atoi(mulMatch[2]) total += x * y } } return total }