Browse Source

Refactor before part2

Piotr Czajkowski 1 week ago
parent
commit
c0862462b8
1 changed files with 21 additions and 16 deletions
  1. 21 16
      06/code.go

+ 21 - 16
06/code.go

@@ -9,9 +9,9 @@ import (
 	"strings"
 )
 
-func readInput(file *os.File) ([][]int, []string) {
+func readInput(file *os.File) ([][]string, []string) {
 	scanner := bufio.NewScanner(file)
-	var numbers [][]int
+	var numbers [][]string
 	var symbols []string
 
 	for scanner.Scan() {
@@ -30,21 +30,21 @@ func readInput(file *os.File) ([][]int, []string) {
 				symbols = append(symbols, strings.Trim(part, " "))
 			}
 		} else {
-			var lineNumbers []int
-			parts := strings.Split(line, " ")
-			for _, part := range parts {
-				if part == "" || part == " " {
-					continue
+			var lineNumbers []string
+			var number string
+			for i := range line {
+				if line[i] == ' ' {
+					if i > 0 && line[i-1] >= '0' && line[i-1] <= '9' {
+						lineNumbers = append(lineNumbers, number)
+						number = ""
+						continue
+					}
 				}
 
-				i, err := strconv.Atoi(strings.Trim(part, " "))
-				if err != nil {
-					log.Fatalf("Bad input: %s", part)
-				}
-
-				lineNumbers = append(lineNumbers, i)
+				number += string(line[i])
 			}
 
+			lineNumbers = append(lineNumbers, number)
 			numbers = append(numbers, lineNumbers)
 		}
 	}
@@ -52,19 +52,24 @@ func readInput(file *os.File) ([][]int, []string) {
 	return numbers, symbols
 }
 
-func part1(numbers [][]int, symbols []string) int {
+func part1(numbers [][]string, symbols []string) int {
 	var sum int
 
 	for i, symbol := range symbols {
 		var result int
 		for row := range numbers {
+			number, err := strconv.Atoi(strings.Trim(numbers[row][i], " "))
+			if err != nil {
+				log.Fatalf("Failed to convert %s to int!\n", numbers[row][i])
+			}
+
 			if symbol == "+" {
-				result += numbers[row][i]
+				result += number
 			} else if symbol == "*" {
 				if result == 0 {
 					result = 1
 				}
-				result *= numbers[row][i]
+				result *= number
 			}
 		}