Day 3: Mull It Over

Megathread guidelines

  • Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
  • You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL

FAQ

  • gothink@lemmy.ca
    link
    fedilink
    English
    arrow-up
    0
    ·
    12 days ago

    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)
    }