aoc2023/day-4/one.go

44 lines
813 B
Go

package main
import (
"strings"
"unicode"
)
// Card represents a single card.
// it tracks its number of matches and occurrences
type Card struct {
matches int
occurrences int
}
var cards = []Card{}
// one computes points based on matching numbers
func one(lines []string) (int, error) {
f := func(c rune) bool {
return !unicode.IsDigit(c)
}
sum := 0
cards = make([]Card, len(lines))
for x, line := range lines {
winning, mynums := func() (string, string) {
y := strings.Split(line, ":")
z := strings.Split(y[1], "|")
return z[0], z[1]
}()
m, err := compare(strings.FieldsFunc(winning, f), strings.FieldsFunc(mynums, f))
if err != nil {
return 0, err
}
cards[x].matches = m
if cards[x].matches > 0 {
sum += (pow(2, cards[x].matches-1))
}
}
return sum, nil
}