package lsproduct import "errors" const testVersion = 3 func check(s string) bool { for _, v := range s { if v < '0' || v > '9' { return false } } return true } func split(s string, n int) <-chan string { c := make(chan string) go func() { for i := 0; i <= len(s)-n; i++ { c <- s[i : i+n] } close(c) }() return c } func max(c <-chan string) int { prod := func(s string) int { p := 1 for _, v := range s { p *= int(v - '0') } return p } var m int for v := range c { if p := prod(v); p > m { m = p } } return m } func LargestSeriesProduct(s string, n int) (int, error) { if ok := check(s); !ok { return 0, errors.New("invalid chars") } if n < 0 || n > len(s) { return 0, errors.New("invalid length") } if n == 0 { return 1, nil } return max(split(s, n)), nil }