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 }