• 0 Posts
  • 1 Comment
Joined 2 years ago
cake
Cake day: June 13th, 2023

help-circle
  • I also used Go - my solution for part 1 was essentially identical to yours. I went a different route for part 2 that I think ended up being simpler though.

    I just prepended do() and don't() to the original regex with a |, that way it captured all 3 in order and I just looped through all the matches once and toggled the isEnabled flag accordingly.

    Always interesting to see how other people tackle the same problem!

    Part 2 Code
    func part2() {
    	filePath := "input.txt"
    	file, _ := os.Open(filePath)
    	defer file.Close()
    
    	pattern := regexp.MustCompile(`do\(\)|don't\(\)|mul\((\d{1,3}),(\d{1,3})\)`)
    	productSum := 0
    	isEnabled := true
    
    	scanner := bufio.NewScanner(file)
    	for scanner.Scan() {
    		line := scanner.Text()
    		matches := pattern.FindAllStringSubmatch(line, -1)
    
    		for _, match := range matches {
    			if match[0] == "do()" {
    				isEnabled = true
    			} else if match[0] == "don't()" {
    				isEnabled = false
    			} else if isEnabled && len(match) == 3 {
    				n, _ := strconv.Atoi(match[1])
    				m, _ := strconv.Atoi(match[2])
    				productSum += n * m
    			}
    		}
    	}
    
    	fmt.Println("Total: ", productSum)
    }