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.2.1.180 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.179 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.178 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.177 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.176 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.175 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.174 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.173 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.172 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.171 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.170 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.169 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.167 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.166 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.165 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.164 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.163 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.162 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.161 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.160 tracks/clojure/exercises/wordy/src/example.clj