github.com/agrigoryan/aoc_2023_go@v0.0.0-20231216221323-4ace361ec685/day2/d2p2.go (about)

     1  package day2
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"strconv"
     7  	"strings"
     8  )
     9  
    10  func d2p2(input string) int {
    11  	lines := strings.Split(input, "\n")
    12  	sum := 0
    13  	for _, line := range lines {
    14  		parts := strings.Split(line, ":")
    15  		plays := strings.Split(parts[1], ";")
    16  		requiredCubes := map[string]int{
    17  			"red":   0,
    18  			"green": 0,
    19  			"blue":  0,
    20  		}
    21  		for _, play := range plays {
    22  			balls := strings.Split(play, ",")
    23  			for _, ball := range balls {
    24  				ballParts := strings.Split(strings.TrimSpace(ball), " ")
    25  				numBalls, err := strconv.Atoi(ballParts[0])
    26  				if err != nil {
    27  					log.Fatalf("error parsing ball count for %v", ball)
    28  				}
    29  				color := ballParts[1]
    30  				if requiredCubes[color] < numBalls {
    31  					requiredCubes[color] = numBalls
    32  				}
    33  			}
    34  		}
    35  		sum += requiredCubes["red"] * requiredCubes["blue"] * requiredCubes["green"]
    36  	}
    37  	fmt.Println(sum)
    38  	return sum
    39  }