package wordy import ( "strconv" "strings" ) type Op func(int, int) int var m = map[string]Op{ "plus": func(a, b int) int { return a + b }, "minus": func(a, b int) int { return a - b }, "multiplied": func(a, b int) int { return a * b }, "divided": func(a, b int) int { return a / b }, } func Answer(s string) (int, bool) { if !strings.HasPrefix(s, "What is") || !strings.HasSuffix(s, "?") { return 0, false } var op Op var x int var didOp bool for _, v := range strings.Fields(s[8 : len(s)-1]) { if i, err := strconv.Atoi(v); err == nil { // got a number, can we op? if op != nil { x = op(x, i) didOp = true } else { x = i } } else { // fetch and set next operation if o, ok := m[v]; ok { op = o } } } return x, didOp }