diff options
| author | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2021-01-04 21:46:09 -0800 |
|---|---|---|
| committer | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2021-01-04 22:02:20 -0800 |
| commit | 409efc7ff15a9c7cab87b5b9b85476e64067e6b7 (patch) | |
| tree | d37a9fea69587db70c2fdc96d6071429a5e412b1 /challenge-094 | |
| parent | 1bcd4befe4758b56be71224314af842d93d4d36c (diff) | |
| download | perlweeklychallenge-club-409efc7ff15a9c7cab87b5b9b85476e64067e6b7.tar.gz perlweeklychallenge-club-409efc7ff15a9c7cab87b5b9b85476e64067e6b7.tar.bz2 perlweeklychallenge-club-409efc7ff15a9c7cab87b5b9b85476e64067e6b7.zip | |
Ch94 (Clojure): Task 1 & 2
Diffstat (limited to 'challenge-094')
4 files changed, 84 insertions, 0 deletions
diff --git a/challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/core.clj b/challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/core.clj new file mode 100644 index 0000000000..bbdfc11de4 --- /dev/null +++ b/challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/core.clj @@ -0,0 +1,12 @@ +(ns tw.weekly.c94.core + (:require [tw.weekly.c94.t1 :as t1]) + (:require [tw.weekly.c94.t2 :as t2]) + (:gen-class)) + +(defn -main + "Run all tasks" + [& _] + (println "Task #1:") + (t1/-main) + (println "\nTask #2:") + (t2/-main)) diff --git a/challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/t1.clj b/challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/t1.clj new file mode 100644 index 0000000000..d8fd720138 --- /dev/null +++ b/challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/t1.clj @@ -0,0 +1,23 @@ +(ns tw.weekly.c94.t1 + (:require [clojure.edn :as edn] + [clojure.pprint :refer [cl-format]])) + +;;; +; Task description for TASK #1 › Group Anagrams +;;; + +(def DEFAULT-INPUT '("opt", "bat", "saw", "tab", "pot", "top", "was")) + +(defn group-anagrams + "Group anagrams from `coll` together." + [coll] + (->> coll + (group-by frequencies) + vals)) + +(defn -main + "Run Task 1 using an array of strings S, defaulting to the example given in + the task description." + [& args] + (let [S (or (some-> args first edn/read-string) DEFAULT-INPUT)] + (cl-format true "[ ~{(~{~s~^, ~})~^,~% ~} ]~%" (group-anagrams S)))) diff --git a/challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/t2.clj b/challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/t2.clj new file mode 100644 index 0000000000..8e3e7b8ef6 --- /dev/null +++ b/challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/t2.clj @@ -0,0 +1,30 @@ +(ns tw.weekly.c94.t2 + (:require [clojure.edn :as edn] + [clojure.pprint :refer [cl-format]])) + +;;; +; Task description for TASK #2 › Binary Tree to Linked List +;;; + +; 1 +; / \ +; 2 3 +; / \ +; 4 5 +; / \ +; 6 7 +(def DEFAULT-INPUT [1 [2 [4] [5 [6] [7]]] [3]]) + +(defn flatten-tree + "Flatten a tree to a linked list." + [tree] + (->> (tree-seq sequential? seq tree) + rest + (filter (complement sequential?)))) + +(defn -main + "Run Task 2 with the given tree, defaulting to the example given in the + task description." + [& args] + (let [tree (or (some-> args first edn/read-string) DEFAULT-INPUT)] + (cl-format true "~{~a~^ -> ~}~%" (flatten-tree tree)))) diff --git a/challenge-094/tyler-wardhaugh/clojure/test/tw/weekly/c94_test.clj b/challenge-094/tyler-wardhaugh/clojure/test/tw/weekly/c94_test.clj new file mode 100644 index 0000000000..4aa5dde415 --- /dev/null +++ b/challenge-094/tyler-wardhaugh/clojure/test/tw/weekly/c94_test.clj @@ -0,0 +1,19 @@ +(ns tw.weekly.c94-test + (:require [clojure.test :refer [deftest is testing]] + [tw.weekly.c94.t1 :refer [group-anagrams]] + [tw.weekly.c94.t2 :refer [flatten-tree]])) + +(deftest task-1 + (testing "Task 1, Max Points" + (is (= #{ #{"bat", "tab"}, + #{"saw", "was"}, + #{"top", "pot", "opt"}} + (->> (group-anagrams '("opt", "bat", "saw", "tab", "pot", "top", "was")) + (into #{} (map set))))) + (is (= [["x"]] (group-anagrams '("x")))))) + +(deftest task-2 + (testing "Task 2, Binary Tree to Linked List" + (is (= [1 2 4 5 6 7 3] (flatten-tree [1 [2 [4] [5 [6] [7]]] [3]]))) + (is (= [1 2 3 4] (flatten-tree [1 [2 [3] [4]]]))) + (is (= [1 2 4 3 5 6] (flatten-tree [1 [2 [4]] [3 [5] [6]]]))))) |
