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.119 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.118 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.117 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.116 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.115 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.114 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.113 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.111 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.110 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.109 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.108 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.107 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.106 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.105 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.104 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.103 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.102 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.101 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.100 tracks/clojure/exercises/wordy/src/example.clj
trackler-2.2.1.99 tracks/clojure/exercises/wordy/src/example.clj