Sha256: f74faab08f336c93aaabbf8731659a451496e3dd68feb6e9ad6e3627a725a4b0

Contents?: true

Size: 873 Bytes

Versions: 396

Compression:

Stored size: 873 Bytes

Contents

(ns wordy
  (:require [clojure.string :refer [join]]))

(def ^:private ops {"plus" +
                    "minus" -
                    "multiplied by" *
                    "divided by" /})

(def ^:private tokens-pattern (re-pattern
                               (str (join "|" (keys ops)) "|-?\\d+|\\S+")))

(defn- parse-op [op-str]
  (or (ops op-str)
      (throw (IllegalArgumentException. (str "unknown operator " op-str)))))

(defn evaluate [expr]
  (if-let [[_ exprs] (re-matches #"What is (.+)\?" expr)]
    (if-let [[token & tokens] (re-seq tokens-pattern exprs)]
      (reduce (fn [acc [op x]]
                ((parse-op op) acc (Integer/parseInt x)))
              (Integer/parseInt token) (partition-all 2 tokens))
      (throw (IllegalArgumentException. "no arithmetic expression found")))
    (throw (IllegalArgumentException. "cannot recognize question"))))

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.0.6.0 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.18 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.17 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.16 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.15 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.14 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.13 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.12 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.11 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.10 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.9 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.8 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.7 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.6 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.5 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.4 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.3 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.2 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.1 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.0.5.0 tracks/clojure/exercises/wordy/src/example.clj