roll my own parser for each round for a little extra speed
This commit is contained in:
parent
725e453168
commit
cfab2ff338
59
02/main.go
59
02/main.go
@ -40,6 +40,35 @@ type game struct {
|
||||
blue int
|
||||
}
|
||||
|
||||
func parseRound(line string) game {
|
||||
g := game{}
|
||||
n := []byte{}
|
||||
for i := 0; i < len(line); i++ {
|
||||
switch line[i] {
|
||||
case ' ':
|
||||
continue
|
||||
case ',':
|
||||
i++
|
||||
continue
|
||||
case '1', '2', '3', '4', '5', '6', '7', '8', '9', '0':
|
||||
n = append(n, line[i])
|
||||
case 'r':
|
||||
g.red = mustAtoi(string(n))
|
||||
n = []byte{}
|
||||
i += 4
|
||||
case 'g':
|
||||
g.green = mustAtoi(string(n))
|
||||
n = []byte{}
|
||||
i += 6
|
||||
case 'b':
|
||||
g.blue = mustAtoi(string(n))
|
||||
n = []byte{}
|
||||
i += 5
|
||||
}
|
||||
}
|
||||
return g
|
||||
}
|
||||
|
||||
func partOne() {
|
||||
scanner := makeScanner(false)
|
||||
|
||||
@ -56,20 +85,7 @@ func partOne() {
|
||||
round++
|
||||
_, draws, _ := strings.Cut(line, ": ")
|
||||
for _, draws := range strings.Split(draws, "; ") {
|
||||
iter := strings.Split(draws, " ")
|
||||
g := game{}
|
||||
for i := 0; i < len(iter); i++ {
|
||||
seen := mustAtoi(iter[i])
|
||||
i++
|
||||
switch iter[i][0] {
|
||||
case 'r':
|
||||
g.red = seen
|
||||
case 'g':
|
||||
g.green = seen
|
||||
case 'b':
|
||||
g.blue = seen
|
||||
}
|
||||
}
|
||||
g := parseRound(draws)
|
||||
if g.red > max.red || g.blue > max.blue || g.green > max.green {
|
||||
ok = false
|
||||
}
|
||||
@ -90,20 +106,7 @@ func partTwo() {
|
||||
_, draws, _ := strings.Cut(line, ": ")
|
||||
max := game{}
|
||||
for _, draws := range strings.Split(draws, "; ") {
|
||||
iter := strings.Split(draws, " ")
|
||||
g := game{}
|
||||
for i := 0; i < len(iter); i++ {
|
||||
seen := mustAtoi(iter[i])
|
||||
i++
|
||||
switch iter[i][0] {
|
||||
case 'r':
|
||||
g.red = seen
|
||||
case 'g':
|
||||
g.green = seen
|
||||
case 'b':
|
||||
g.blue = seen
|
||||
}
|
||||
}
|
||||
g := parseRound(draws)
|
||||
if g.red > max.red {
|
||||
max.red = g.red
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user