package main import ( "slices" "strconv" "strings" ) type Card struct { id uint64 winning []uint64 guesses []uint64 correctGuesses int } func (c *Card) parseCard(input string) error { initialSplit := strings.Split(input, ":") idString := initialSplit[0][5:] numberSplit := strings.Split(initialSplit[1], "|") winningNumbers := strings.Split(numberSplit[0], " ") guesses := strings.Split(numberSplit[1], " ") var err error c.id, err = strconv.ParseUint(strings.TrimSpace(idString), 10, 64) if err != nil { return err } for _, number := range winningNumbers { number = strings.TrimSpace(number) if len(number) == 0 { continue } num, err := strconv.ParseUint(number, 10, 64) if err != nil { return err } c.winning = append(c.winning, num) } for _, number := range guesses { number = strings.TrimSpace(number) if len(number) == 0 { continue } num, err := strconv.ParseUint(number, 10, 64) if err != nil { return err } c.guesses = append(c.guesses, num) } c.correctGuesses = 0 for _, guess := range c.guesses { if slices.Contains(c.winning, guess) { c.correctGuesses++ } } return nil } func (c *Card) getPoints() uint64 { if c.correctGuesses == 0 { return 0 } var points uint64 = 1 for i := c.correctGuesses - 1; i > 0; i-- { points *= 2 } return points }