aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Wardhaugh <twardhaugh@cap-rx.com>2021-10-22 12:23:19 -0700
committerTyler Wardhaugh <twardhaugh@cap-rx.com>2021-10-22 23:48:52 -0700
commit08e64c2a5d7556aaa70c57387494410fc2711535 (patch)
tree3fe48ec62992251a75c7a8c67ce98d87bec17475
parent86c40a59c5f62ad69ebbd3b6c383b8694dfcc536 (diff)
downloadperlweeklychallenge-club-08e64c2a5d7556aaa70c57387494410fc2711535.tar.gz
perlweeklychallenge-club-08e64c2a5d7556aaa70c57387494410fc2711535.tar.bz2
perlweeklychallenge-club-08e64c2a5d7556aaa70c57387494410fc2711535.zip
Ch135 (Clojure): Task 1
-rw-r--r--challenge-135/tyler-wardhaugh/clojure/src/tw/weekly/c135/t1.clj24
-rw-r--r--challenge-135/tyler-wardhaugh/clojure/test/tw/weekly/c135/t1_test.clj7
2 files changed, 28 insertions, 3 deletions
diff --git a/challenge-135/tyler-wardhaugh/clojure/src/tw/weekly/c135/t1.clj b/challenge-135/tyler-wardhaugh/clojure/src/tw/weekly/c135/t1.clj
index 1ab26e6eb5..0ff0714a19 100644
--- a/challenge-135/tyler-wardhaugh/clojure/src/tw/weekly/c135/t1.clj
+++ b/challenge-135/tyler-wardhaugh/clojure/src/tw/weekly/c135/t1.clj
@@ -7,9 +7,31 @@
;;;
(def DEFAULT-INPUT [1234567])
+(defn abs
+ "Return the absolute value of n."
+ [n]
+ (if (pos? n) n (- n)))
+
+(defn middle-3
+ "Find the middle 3-digits of the given integer n if possible, otherwise throw
+ a sensible error."
+ [n]
+ {:pre [(int? n)]}
+ (let [sn (-> n abs str)
+ len (count sn)]
+ (cond
+ (even? len) (throw (ex-info "even number of digits" {"length" len}))
+ (< len 3) (throw (ex-info "too short" {"length" len}))
+ :else (subs sn (dec (/ len 2)) (+ 2 (/ len 2))))))
+
(defn -main
"Run Task 1 with a given input N, defaulting to the first example from the
task description."
[& args]
(let [[N] (or (some->> args (map edn/read-string)) DEFAULT-INPUT)]
- ))
+ (try
+ (println (middle-3 N))
+ (catch Exception e
+ (cl-format true "error: ~a (~:{~a=~s~^, ~})~%"
+ (.getMessage e)
+ (ex-data e))))))
diff --git a/challenge-135/tyler-wardhaugh/clojure/test/tw/weekly/c135/t1_test.clj b/challenge-135/tyler-wardhaugh/clojure/test/tw/weekly/c135/t1_test.clj
index f6dfa90c7d..707a9162cd 100644
--- a/challenge-135/tyler-wardhaugh/clojure/test/tw/weekly/c135/t1_test.clj
+++ b/challenge-135/tyler-wardhaugh/clojure/test/tw/weekly/c135/t1_test.clj
@@ -1,7 +1,10 @@
(ns tw.weekly.c135.t1-test
(:require [clojure.test :refer [deftest is testing]]
- #_[tw.weekly.c135.t1 :refer []]))
+ [tw.weekly.c135.t1 :refer [middle-3]]))
(deftest examples
(testing "Examples from description"
- ))
+ (is (= "345" (middle-3 1234567)))
+ (is (= "123" (middle-3 -123)))
+ (is (thrown-with-msg? Exception #"too short" (middle-3 1)))
+ (is (thrown-with-msg? Exception #"even number of digits" (middle-3 10)))))