github.com/agrigoryan/aoc_2023_go@v0.0.0-20231216221323-4ace361ec685/day4/d4p2.go (about) 1 package day4 2 3 import ( 4 "fmt" 5 "slices" 6 "strings" 7 8 "github.com/agrigoryan/aoc_2023_go/aocutils" 9 ) 10 11 func d4p2(input string) int { 12 lines := strings.Split(input, "\n") 13 counts := make([]int, len(lines)) 14 for i := 0; i < len(lines); i++ { 15 counts[i] = 1 16 } 17 18 trimSpaces := aocutils.Mapper(func(str string) string { return strings.TrimSpace(str) }) 19 filterEmpty := aocutils.Filterer(func(str string) bool { return len(str) > 0 }) 20 21 for i, line := range strings.Split(input, "\n") { 22 ticket := strings.Split(line, ":")[1] 23 parts := strings.Split(ticket, "|") 24 winningNumbers := filterEmpty(trimSpaces(strings.Split(parts[0], " "))) 25 numbers := filterEmpty(trimSpaces(strings.Split(parts[1], " "))) 26 matches := 0 27 for _, num := range numbers { 28 if slices.Contains(winningNumbers, num) { 29 matches += 1 30 } 31 } 32 for j := i + 1; j <= i+matches; j++ { 33 counts[j] += counts[i] 34 } 35 } 36 numTickets := 0 37 for _, num := range counts { 38 numTickets += num 39 } 40 fmt.Println(numTickets) 41 return numTickets 42 }