Browse Source

Cleaner, but still wrong

Piotr Czajkowski 2 tuần trước cách đây
mục cha
commit
dab519929f
1 tập tin đã thay đổi với 14 bổ sung8 xóa
  1. 14 8
      03/code.go

+ 14 - 8
03/code.go

@@ -52,22 +52,25 @@ func part2(lines []string) int {
 	multiply := true
 	re := regexp.MustCompile(`mul\(\d+,\d+\)`)
 
-	var startIndex int
 	for _, line := range lines {
-		edge := len(line) - 1
-		endIndex := edge
+		var startIndex, endIndex int
 		reading := true
 		for reading {
 			if multiply {
-				index := strings.Index(line[startIndex:edge], "don't()")
+				index := strings.Index(line, "don't()")
 				multiply = false
 				if index == -1 {
-					endIndex = edge
+					endIndex = len(line)
 					reading = false
 				} else {
 					endIndex = index
 				}
 
+				if startIndex > endIndex {
+					startIndex++
+					continue
+				}
+
 				matches := re.FindAllString(line[startIndex:endIndex], -1)
 				for _, match := range matches {
 					mul := make([]int, 2)
@@ -78,14 +81,17 @@ func part2(lines []string) int {
 
 					result += mul[0] * mul[1]
 				}
+
+				line = line[endIndex:]
+				startIndex = 0
 			} else {
-				index := strings.Index(line[startIndex:edge], "do()")
+				index := strings.Index(line, "do()")
 				if index == -1 {
-					startIndex = 0
 					reading = false
 				} else {
 					multiply = true
-					startIndex = index
+					startIndex = 0
+					line = line[index:]
 				}
 			}
 		}