From 08e64c2a5d7556aaa70c57387494410fc2711535 Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Fri, 22 Oct 2021 12:23:19 -0700 Subject: Ch135 (Clojure): Task 1 --- .../clojure/src/tw/weekly/c135/t1.clj | 24 +++++++++++++++++++++- .../clojure/test/tw/weekly/c135/t1_test.clj | 7 +++++-- 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))))) -- cgit