package main import ( "bufio" "fmt" "os" ) func main() { inp := StdinToStrings() for i := range inp { ln, gb := RemoveGarbage(inp[i]) fmt.Print(ln) v := FindGroupValue(ln) fmt.Println(" :: Value:", v, ":: Garbage:", gb) } } func FindGroupValue(inp string) int { var ret, depth int for i := 0; i < len(inp); i++ { switch inp[i] { case '{': depth++ ret += depth case '}': depth-- } } return ret } func GetOuterGroup(inp string) string { var ret string gCount := 1 for i := range inp[1:] { if gCount == 0 { break } ret += string(inp[i]) switch inp[i] { case '{': gCount++ case '}': gCount-- } } return ret } func RemoveGarbage(inp string) (string, int) { var ret string var isGarbage, ignore bool var cnt int for i := 0; i < len(inp); i++ { if isGarbage { if ignore { ignore = false continue } switch inp[i] { case '!': ignore = true continue case '>': isGarbage = false default: cnt++ } } else { switch inp[i] { case '<': isGarbage = true default: ret += string(inp[i]) } } } return ret, cnt } func StdinToStrings() []string { var input []string scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { input = append(input, scanner.Text()) } return input }