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

     1  package day2
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"strconv"
     7  	"strings"
     8  )
     9  
    10  func d2p1(input string) int {
    11  	maxBalls := map[string]int{
    12  		"red":   12,
    13  		"green": 13,
    14  		"blue":  14,
    15  	}
    16  	lines := strings.Split(input, "\n")
    17  	sum := 0
    18  	for _, line := range lines {
    19  		parts := strings.Split(line, ":")
    20  		id, err := strconv.Atoi(strings.Split(parts[0], " ")[1])
    21  		if err != nil {
    22  			log.Fatalf("failed to parse id for line %v", line)
    23  		}
    24  		plays := strings.Split(parts[1], ";")
    25  		gamePossbile := true
    26  		for _, play := range plays {
    27  			balls := strings.Split(play, ",")
    28  			for _, ball := range balls {
    29  				ballParts := strings.Split(strings.TrimSpace(ball), " ")
    30  				numBalls, err := strconv.Atoi(ballParts[0])
    31  				if err != nil {
    32  					log.Fatalf("error parsing ball count for %v", ball)
    33  				}
    34  				color := ballParts[1]
    35  				if numBalls > maxBalls[color] {
    36  					gamePossbile = false
    37  					break
    38  				}
    39  			}
    40  			if !gamePossbile {
    41  				break
    42  			}
    43  		}
    44  		if gamePossbile {
    45  			sum += id
    46  		}
    47  	}
    48  	fmt.Println(sum)
    49  	return sum
    50  }