78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"slices"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type Data struct {
|
|
CardNr int
|
|
WinNumber []int
|
|
YourNumber []int
|
|
}
|
|
|
|
func convertStringToInt(s []string) []int {
|
|
var result []int
|
|
for _, x := range s {
|
|
inti, err := strconv.Atoi(x)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
result = append(result, inti)
|
|
}
|
|
return result
|
|
}
|
|
func getData(s string) []string {
|
|
var result []string
|
|
fileReader, err := os.Open(s)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
fileScanner := bufio.NewScanner(fileReader)
|
|
fileScanner.Split(bufio.ScanLines)
|
|
for fileScanner.Scan() {
|
|
result = append(result, fileScanner.Text())
|
|
}
|
|
return result
|
|
}
|
|
func convertToUsefulData(s []string) []Data {
|
|
var result []Data
|
|
for i, line := range s {
|
|
spl := strings.Split(line, ":")
|
|
numbers := strings.Split(spl[1], "|")
|
|
win := strings.Fields(numbers[0])
|
|
your := strings.Fields(numbers[1])
|
|
result = append(result, Data{CardNr: i, WinNumber: convertStringToInt(win), YourNumber: convertStringToInt(your)})
|
|
}
|
|
return result
|
|
}
|
|
|
|
func main() {
|
|
fmt.Println("Go Fast!")
|
|
data := convertToUsefulData(getData("./data"))
|
|
fmt.Println(data)
|
|
Part1(data)
|
|
}
|
|
|
|
func Part1(data []Data) {
|
|
var result int
|
|
for i, _ := range data {
|
|
var count int
|
|
for j, _ := range data[i].YourNumber {
|
|
if slices.Contains(data[i].WinNumber, data[i].YourNumber[j]) {
|
|
if count == 0 {
|
|
count++
|
|
} else {
|
|
count *= 2
|
|
}
|
|
}
|
|
}
|
|
result += count
|
|
fmt.Printf("card %d Points: %d\n", i, count)
|
|
}
|
|
fmt.Println("The result is: ", result)
|
|
}
|