Advent-of-Code/2023/day04/main.go
2023-12-04 07:46:11 +01:00

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)
}