From 329b8aa2ab01a46bb24f14e7f08d0b9306d1e1cf Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 11 Nov 2016 16:11:27 +0100 Subject: Solve wordy --- go/wordy/wordy.go | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/go/wordy/wordy.go b/go/wordy/wordy.go index cfa8f1b..ec5ea35 100644 --- a/go/wordy/wordy.go +++ b/go/wordy/wordy.go @@ -1,5 +1,41 @@ 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) { - return 0, false + 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 + if op != nil { + x = op(x, i) + didOp = true + } else { + x = i + } + } else { + // try to fetch operation + if o, ok := m[v]; ok { + op = o + } + } + } + return x, didOp } -- cgit v1.2.3