41 lines
621 B
Go
41 lines
621 B
Go
package q394
|
|
|
|
import "strings"
|
|
|
|
func decode(s string) (int, string) {
|
|
advanced := 0
|
|
number := 0
|
|
buf := strings.Builder{}
|
|
|
|
Loop:
|
|
for advanced < len(s) {
|
|
advanced++
|
|
cur := s[advanced-1]
|
|
switch {
|
|
case cur >= '0' && cur <= '9':
|
|
number = 10*number + int(cur-'0')
|
|
|
|
case cur == '[':
|
|
adv, child := decode(s[advanced:])
|
|
advanced += adv
|
|
for range number {
|
|
buf.WriteString(child)
|
|
}
|
|
number = 0
|
|
|
|
case cur == ']':
|
|
break Loop
|
|
|
|
default:
|
|
buf.WriteByte(cur)
|
|
}
|
|
}
|
|
return advanced, buf.String()
|
|
}
|
|
|
|
func decodeString(s string) string {
|
|
_, ret := decode(s)
|
|
return ret
|
|
}
|
|
|
|
var _ = decodeString
|