aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-10-01 10:18:48 -0700
committerTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-10-01 13:31:05 -0700
commit6ee7fd41be52d089f3aff1a9f211da73565ad35a (patch)
tree9ed5d6765d579afc23f5c8fe442c5957e1a800ae
parent75e3cdb13bd64a8a414eca37c8dccadff8c3ae59 (diff)
downloadperlweeklychallenge-club-6ee7fd41be52d089f3aff1a9f211da73565ad35a.tar.gz
perlweeklychallenge-club-6ee7fd41be52d089f3aff1a9f211da73565ad35a.tar.bz2
perlweeklychallenge-club-6ee7fd41be52d089f3aff1a9f211da73565ad35a.zip
Ch80/Task 1 (clj): add third algorithm
Also add benchmarking for this newest algorithm.
-rw-r--r--challenge-080/tyler-wardhaugh/clojure/src/tw/weekly/c80/t1.clj12
-rw-r--r--challenge-080/tyler-wardhaugh/clojure/src/tw/weekly/c80/t1_bench.clj13
2 files changed, 18 insertions, 7 deletions
diff --git a/challenge-080/tyler-wardhaugh/clojure/src/tw/weekly/c80/t1.clj b/challenge-080/tyler-wardhaugh/clojure/src/tw/weekly/c80/t1.clj
index ed1cc0d665..440d3cb7df 100644
--- a/challenge-080/tyler-wardhaugh/clojure/src/tw/weekly/c80/t1.clj
+++ b/challenge-080/tyler-wardhaugh/clojure/src/tw/weekly/c80/t1.clj
@@ -9,7 +9,7 @@
;Write a script to find out the smallest positive number missing.
;;;;
-(defn smallest-missing-by-set
+(defn smallest-missing-by-set-intersection
"Determine the smallest positive integer missing in a sequence (by set difference)."
[coll]
(if-let [missing (->> coll
@@ -30,7 +30,15 @@
(inc (last sorted)))
1))
-(def smallest-missing smallest-missing-by-sorting)
+(defn smallest-missing-by-set-membership
+ "Determine the smallest positive integer missing in a sequence (by set membership)."
+ [coll]
+ (let [scoll (->> coll (filter pos-int?) set)]
+ (->> (iterate inc 1)
+ (remove scoll)
+ first)))
+
+(def smallest-missing smallest-missing-by-set-membership)
(defn -main
"Run Task 1 with a list of integers N, defaulting to the first one given in the examples."
diff --git a/challenge-080/tyler-wardhaugh/clojure/src/tw/weekly/c80/t1_bench.clj b/challenge-080/tyler-wardhaugh/clojure/src/tw/weekly/c80/t1_bench.clj
index 14331d11f0..35c7d2b4f2 100644
--- a/challenge-080/tyler-wardhaugh/clojure/src/tw/weekly/c80/t1_bench.clj
+++ b/challenge-080/tyler-wardhaugh/clojure/src/tw/weekly/c80/t1_bench.clj
@@ -7,10 +7,13 @@
(defn -main
[& _]
(doseq [t [[1 -2 8] [1 2 3] [1 2 3 (int 1e7)]]]
- (cl-format true "Benchmarking ~a by-set:~%" t)
- (cc/quick-bench (t1/smallest-missing-by-set t))
+ (cl-format true "~2%===~a~60,1,0,'=a" t "=")
- (Thread/sleep 1000)
+ (cl-format true "~2%Benchmarking ~a by set-intersection:~%" t)
+ (cc/quick-bench (t1/smallest-missing-by-set-intersection t))
- (cl-format true "Benchmarking ~a by-sorting~%" t)
- (cc/quick-bench (t1/smallest-missing-by-sorting t))))
+ (cl-format true "~2%Benchmarking ~a by sorting:~%" t)
+ (cc/quick-bench (t1/smallest-missing-by-sorting t))
+
+ (cl-format true "~2%Benchmarking ~a by set-membership:~%" t)
+ (cc/quick-bench (t1/smallest-missing-by-set-membership t))))