For problem statement at 0-999/500-599/550-559/552/problemE.txt this is a correct solution, but verifier at 0-999/500-599/550-559/552/verifierE.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func evalNoBracket(nums []uint64, ops []byte) uint64 {
if len(nums) == 0 {
return 0
}
var sum uint64 = 0
var currentProd uint64 = nums[0]
for i := 0; i < len(ops); i++ {
if ops[i] == '*' {
currentProd *= nums[i+1]
} else {
sum += currentProd
currentProd = nums[i+1]
}
}
sum += currentProd
return sum
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
if !scanner.Scan() {
return
}
s := scanner.Text()
if len(s) == 0 {
return
}
var nums []uint64
var ops []byte
for i := 0; i < len(s); i++ {
if i%2 == 0 {
nums = append(nums, uint64(s[i]-'0'))
} else {
ops = append(ops, s[i])
}
}
var LCandidates []int
var RCandidates []int
LCandidates = append(LCandidates, 0)
for i := 0; i < len(ops); i++ {
if ops[i] == '*' {
LCandidates = append(LCandidates, i+1)
RCandidates = append(RCandidates, i)
}
}
RCandidates = append(RCandidates, len(nums)-1)
var maxVal uint64 = 0
for _, L := range LCandidates {
for _, R := range RCandidates {
if L <= R {
bracketNums := nums[L : R+1]
var bracketOps []byte
if L < R {
bracketOps = ops[L:R]
}
val := evalNoBracket(bracketNums, bracketOps)
newNums := make([]uint64, 0, len(nums)-(R-L))
newNums = append(newNums, nums[:L]...)
newNums = append(newNums, val)
newNums = append(newNums, nums[R+1:]...)
newOps := make([]byte, 0, len(ops)-(R-L))
newOps = append(newOps, ops[:L]...)
newOps = append(newOps, ops[R:]...)
res := evalNoBracket(newNums, newOps)
if res > maxVal {
maxVal = res
}
}
}
}
fmt.Println(maxVal)
}