summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-11-11 16:11:27 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-11-11 16:11:27 +0100
commit329b8aa2ab01a46bb24f14e7f08d0b9306d1e1cf (patch)
tree3932ff9889b00578548d67a5bdb5006e9c1666e4
parent09700a99b67f2dd9dbbdd4954d576d24a18832f9 (diff)
Solve wordy
-rw-r--r--go/wordy/wordy.go38
1 files changed, 37 insertions, 1 deletions
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
}