Browse Source

Able to read input

Piotr Czajkowski 2 years ago
parent
commit
0cc502e7eb
2 changed files with 126 additions and 0 deletions
  1. 107 0
      04/code.go
  2. 19 0
      04/testinput

+ 107 - 0
04/code.go

@@ -0,0 +1,107 @@
+package main
+
+import (
+	"bufio"
+	"fmt"
+	"log"
+	"os"
+	"strconv"
+	"strings"
+)
+
+func readNumbers(line string) []int {
+	var numbers []int
+	numbersStrings := strings.Split(line, ",")
+	for _, numberString := range numbersStrings {
+		if number, err := strconv.Atoi(numberString); err == nil {
+			numbers = append(numbers, number)
+		} else {
+			log.Fatal("Numbers: ", err)
+		}
+	}
+
+	return numbers
+}
+
+func readRow(line string) []int {
+	var numbers []int
+	numbersStrings := strings.Split(line, " ")
+	fmt.Println(numbersStrings)
+	for _, numberString := range numbersStrings {
+		if numberString == "" {
+			continue
+		}
+
+		if number, err := strconv.Atoi(numberString); err == nil {
+			numbers = append(numbers, number)
+		} else {
+			log.Fatal("Row: ", err, numberString)
+		}
+	}
+
+	return numbers
+}
+
+type Number struct {
+	Val    int
+	Marked bool
+}
+
+func readInput(file *os.File) ([][][]Number, []int) {
+	scanner := bufio.NewScanner(file)
+	numbersRead := false
+	var numbers []int
+	var boards [][][]Number
+	boardIndex := 0
+	rowIndex := 0
+	for scanner.Scan() {
+		line := scanner.Text()
+		if line == "" {
+			continue
+		}
+
+		if !numbersRead {
+			numbers = readNumbers(line)
+			numbersRead = true
+			continue
+		}
+
+		if rowIndex == 0 {
+			boards = append(boards, make([][]Number, 5))
+		}
+
+		boards[boardIndex][rowIndex] = make([]Number, 5)
+		fmt.Println(line)
+		numbersInRow := readRow(line)
+		for i, number := range numbersInRow {
+			boards[boardIndex][rowIndex][i] = Number{number, false}
+		}
+
+		rowIndex++
+		if rowIndex > 4 {
+			rowIndex = 0
+			boardIndex++
+		}
+	}
+	if err := scanner.Err(); err != nil {
+		log.Fatalf("Scanner error: %s", err)
+	}
+
+	return boards, numbers
+}
+
+func main() {
+	if len(os.Args) < 2 {
+		log.Fatal("You need to specify a file!")
+	}
+
+	filePath := os.Args[1]
+	file, err := os.Open(filePath)
+	if err != nil {
+		log.Fatalf("Failed to open %s!\n", filePath)
+
+	}
+
+	boards, numbers := readInput(file)
+	fmt.Println(boards, numbers)
+}

+ 19 - 0
04/testinput

@@ -0,0 +1,19 @@
+7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
+
+22 13 17 11  0
+ 8  2 23  4 24
+21  9 14 16  7
+ 6 10  3 18  5
+ 1 12 20 15 19
+
+ 3 15  0  2 22
+ 9 18 13 17  5
+19  8  7 25 23
+20 11 10 24  4
+14 21 16 12  6
+
+14 21 17 24  4
+10 16 15  9 19
+18  8 23 26 20
+22 11 13  6  5
+ 2  0 12  3  7