aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-11-20 00:32:35 -0800
committerTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-11-20 13:47:10 -0800
commit982caeafb3eaa7d4b19a061acfd134235d72785f (patch)
treea7eddddf41aeb1ade0dba48a5ab530dfd0c23a4a
parentbf55bacf05338e510937a11abd0850b00bfa0307 (diff)
downloadperlweeklychallenge-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.clj32
-rw-r--r--challenge-087/tyler-wardhaugh/clojure/test/tw/weekly/c87_test.clj10
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])))))