package main import ( "bufio" "fmt" "io" "strconv" "strings" ) var replacer = strings.NewReplacer(",", " ", ";", " ") func maxgame(r io.Reader) (red, green, blue int) { scanner := bufio.NewScanner(r) scanner.Split(bufio.ScanWords) for { if !scanner.Scan() { break } n, _ := strconv.Atoi(scanner.Text()) scanner.Scan() switch scanner.Text() { case "red": if n > red { red = n } case "green": if n > green { green = n } case "blue": if n > blue { blue = n } } } return } type day02 struct{} func (d day02) solve1(r io.Reader) string { var ( totalred = 12 totalgreen = 13 totalblue = 14 gameSum = 0 scanner = bufio.NewScanner(r) ) for gameN := 1; scanner.Scan(); gameN++ { line := scanner.Text() _, game, _ := strings.Cut(line, ": ") sr := strings.NewReader(replacer.Replace(game)) red, green, blue := maxgame(sr) if red < totalred && green < totalgreen && blue < totalblue { gameSum += gameN } } return fmt.Sprintf("%d", gameSum) } func (d day02) solve2(r io.Reader) string { var ( sum = 0 scanner = bufio.NewScanner(r) ) for scanner.Scan() { line := scanner.Text() _, game, _ := strings.Cut(line, ": ") sr := strings.NewReader(replacer.Replace(game)) red, green, blue := maxgame(sr) sum += (red * green * blue) } return fmt.Sprintf("%d", sum) }