diff options
| author | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2020-11-20 00:32:35 -0800 |
|---|---|---|
| committer | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2020-11-20 13:47:10 -0800 |
| commit | 982caeafb3eaa7d4b19a061acfd134235d72785f (patch) | |
| tree | a7eddddf41aeb1ade0dba48a5ab530dfd0c23a4a | |
| parent | bf55bacf05338e510937a11abd0850b00bfa0307 (diff) | |
| download | perlweeklychallenge-club-982caeafb3eaa7d4b19a061acfd134235d72785f.tar.gz perlweeklychallenge-club-982caeafb3eaa7d4b19a061acfd134235d72785f.tar.bz2 perlweeklychallenge-club-982caeafb3eaa7d4b19a061acfd134235d72785f.zip | |
Ch87 (Clojure): Task 1
| -rw-r--r-- | challenge-087/tyler-wardhaugh/clojure/src/tw/weekly/c87/t1.clj | 32 | ||||
| -rw-r--r-- | challenge-087/tyler-wardhaugh/clojure/test/tw/weekly/c87_test.clj | 10 |
2 files changed, 42 insertions, 0 deletions
diff --git a/challenge-087/tyler-wardhaugh/clojure/src/tw/weekly/c87/t1.clj b/challenge-087/tyler-wardhaugh/clojure/src/tw/weekly/c87/t1.clj new file mode 100644 index 0000000000..e2f550af08 --- /dev/null +++ b/challenge-087/tyler-wardhaugh/clojure/src/tw/weekly/c87/t1.clj @@ -0,0 +1,32 @@ +(ns tw.weekly.c87.t1 + (:require [clojure.edn :as edn]) + (:require [clojure.set :as set]) + (:require [clojure.pprint :refer [cl-format]])) + +;;; +; Task description for TASK #1 › Longest Consecutive Sequence +;;; + +(defn find-lcs + "Find the longest consecutive sequence (with 2 or more elements)" + [coll] + (loop [s (set coll) + lcs-diff 0 + lcs [0 0]] + (if (empty? s) + lcs + (let [elem (first s) + low (last (take-while s (iterate dec elem))) + high (last (take-while s (iterate inc elem))) + diff (- high low)] + (if (and (not (zero? diff)) (> diff lcs-diff)) + (recur (set/difference s (set (range low (inc high)))) diff [low high]) + (recur (set/difference s #{elem}) lcs-diff lcs)))))) + +(defn -main + "Run Task 1 with a list of numbers N, defaulting to the + first example given in the task description." + [& args] + (let [N (or (some->> args (map edn/read-string)) [100 4 50 3 2]) + [low high] (find-lcs N)] + (cl-format true "~{~a~^, ~}" (range low (inc high))))) diff --git a/challenge-087/tyler-wardhaugh/clojure/test/tw/weekly/c87_test.clj b/challenge-087/tyler-wardhaugh/clojure/test/tw/weekly/c87_test.clj new file mode 100644 index 0000000000..d99a5699c9 --- /dev/null +++ b/challenge-087/tyler-wardhaugh/clojure/test/tw/weekly/c87_test.clj @@ -0,0 +1,10 @@ +(ns tw.weekly.c86-test + (:require [clojure.test :refer [deftest is testing]] + [clojure.java.io :as io] + [tw.weekly.c87.t1 :refer [find-lcs]])) + +(deftest task-1 + (testing "Task 1 Longest Consecutive Sequence" + (is (= [2 4] (find-lcs [100 4 50 3 2]))) + (is (= [0 0] (find-lcs [20 30 10 40 50]))) + (is (= [9 11] (find-lcs [20 19 9 11 10]))))) |
