72 lines
1.3 KiB
Go
72 lines
1.3 KiB
Go
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
|
|
}
|