From 6ee7fd41be52d089f3aff1a9f211da73565ad35a Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Thu, 1 Oct 2020 10:18:48 -0700 Subject: Ch80/Task 1 (clj): add third algorithm Also add benchmarking for this newest algorithm. --- .../tyler-wardhaugh/clojure/src/tw/weekly/c80/t1.clj | 12 ++++++++++-- .../tyler-wardhaugh/clojure/src/tw/weekly/c80/t1_bench.clj | 13 ++++++++----- 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)))) -- cgit