From 982caeafb3eaa7d4b19a061acfd134235d72785f Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Fri, 20 Nov 2020 00:32:35 -0800 Subject: Ch87 (Clojure): Task 1 --- .../clojure/src/tw/weekly/c87/t1.clj | 32 ++++++++++++++++++++++ .../clojure/test/tw/weekly/c87_test.clj | 10 +++++++ 2 files changed, 42 insertions(+) create mode 100644 challenge-087/tyler-wardhaugh/clojure/src/tw/weekly/c87/t1.clj create mode 100644 challenge-087/tyler-wardhaugh/clojure/test/tw/weekly/c87_test.clj 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]))))) -- cgit