204 tokens in Go for part 2 by Olivier Mengué
Download solution
packagemain
import(
"bytes"
"fmt"
"io"
"os"
)
funcmain(){
buf,_:=io.ReadAll(os.Stdin)
lines:=bytes.Split(buf,[]byte{'\n'})
nums:=lines[:len(lines)-1]
opsLine:=lines[len(lines)-1]
part2:=0
p:=len(nums[0])-1
forp>0{
colOp:=p
opChar:=opsLine[colOp]
foropChar==' '{
colOp--
opChar=opsLine[colOp]
}
n:=int('+'-opChar)
forp>=colOp{
m:=0
forq:=rangenums{
digit:=nums[q][p]
ifdigit==' '{
continue
}
m=m*10+int(digit-'0')
}
ifopChar=='*'{
n*=m
}else{
n+=m
}
p--
}
part2+=n
p--
}
fmt.Println(part2)
}