remove the other cases where we don't need to walk the string
This commit is contained in:
		
							
								
								
									
										53
									
								
								02/main.go
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								02/main.go
									
									
									
									
									
								
							@@ -5,7 +5,6 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
					 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -83,11 +82,21 @@ func partOne() {
 | 
				
			|||||||
		line := scanner.Text()
 | 
							line := scanner.Text()
 | 
				
			||||||
		ok := true
 | 
							ok := true
 | 
				
			||||||
		round++
 | 
							round++
 | 
				
			||||||
		_, draws, _ := strings.Cut(line, ": ")
 | 
							for i, c := range line {
 | 
				
			||||||
		for _, draws := range strings.Split(draws, "; ") {
 | 
								if c == ':' {
 | 
				
			||||||
			g := parseRound(draws)
 | 
									line = line[i+2:]
 | 
				
			||||||
			if g.red > max.red || g.blue > max.blue || g.green > max.green {
 | 
									break
 | 
				
			||||||
				ok = false
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							var start, end int
 | 
				
			||||||
 | 
							for i, c := range line {
 | 
				
			||||||
 | 
								if c == ';' || i == len(line)-1 {
 | 
				
			||||||
 | 
									end = i + 1
 | 
				
			||||||
 | 
									g := parseRound(line[start:end])
 | 
				
			||||||
 | 
									if g.red > max.red || g.blue > max.blue || g.green > max.green {
 | 
				
			||||||
 | 
										ok = false
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									start = i + 2
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if ok {
 | 
							if ok {
 | 
				
			||||||
@@ -103,18 +112,28 @@ func partTwo() {
 | 
				
			|||||||
	sum := 0
 | 
						sum := 0
 | 
				
			||||||
	for scanner.Scan() {
 | 
						for scanner.Scan() {
 | 
				
			||||||
		line := scanner.Text()
 | 
							line := scanner.Text()
 | 
				
			||||||
		_, draws, _ := strings.Cut(line, ": ")
 | 
							for i, c := range line {
 | 
				
			||||||
 | 
								if c == ':' {
 | 
				
			||||||
 | 
									line = line[i+2:]
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		max := game{}
 | 
							max := game{}
 | 
				
			||||||
		for _, draws := range strings.Split(draws, "; ") {
 | 
							var start, end int
 | 
				
			||||||
			g := parseRound(draws)
 | 
							for i, c := range line {
 | 
				
			||||||
			if g.red > max.red {
 | 
								if c == ';' || i == len(line)-1 {
 | 
				
			||||||
				max.red = g.red
 | 
									end = i + 1
 | 
				
			||||||
			}
 | 
									g := parseRound(line[start:end])
 | 
				
			||||||
			if g.blue > max.blue {
 | 
									if g.red > max.red {
 | 
				
			||||||
				max.blue = g.blue
 | 
										max.red = g.red
 | 
				
			||||||
			}
 | 
									}
 | 
				
			||||||
			if g.green > max.green {
 | 
									if g.blue > max.blue {
 | 
				
			||||||
				max.green = g.green
 | 
										max.blue = g.blue
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if g.green > max.green {
 | 
				
			||||||
 | 
										max.green = g.green
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									start = i + 2
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		sum += max.blue * max.green * max.red
 | 
							sum += max.blue * max.green * max.red
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user