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