github.com/agrigoryan/aoc_2023_go@v0.0.0-20231216221323-4ace361ec685/day4/d4p1.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 d4p1(input string) int { 12 sum := 0 13 14 trimSpaces := aocutils.Mapper(func(str string) string { return strings.TrimSpace(str) }) 15 filterEmpty := aocutils.Filterer(func(str string) bool { return len(str) > 0 }) 16 17 for _, line := range strings.Split(input, "\n") { 18 ticket := strings.Split(line, ":")[1] 19 parts := strings.Split(ticket, "|") 20 winningNumbers := filterEmpty(trimSpaces(strings.Split(parts[0], " "))) 21 numbers := filterEmpty(trimSpaces(strings.Split(parts[1], " "))) 22 matches := 0 23 for _, num := range numbers { 24 if slices.Contains(winningNumbers, num) { 25 matches += 1 26 } 27 } 28 if matches > 0 { 29 worth := 1 << (matches - 1) 30 sum += worth 31 } 32 } 33 fmt.Println(sum) 34 return sum 35 }