aboutsummaryrefslogtreecommitdiff
path: root/challenge-094
diff options
context:
space:
mode:
authorTyler Wardhaugh <tyler.wardhaugh@gmail.com>2021-01-04 21:46:09 -0800
committerTyler Wardhaugh <tyler.wardhaugh@gmail.com>2021-01-04 22:02:20 -0800
commit409efc7ff15a9c7cab87b5b9b85476e64067e6b7 (patch)
treed37a9fea69587db70c2fdc96d6071429a5e412b1 /challenge-094
parent1bcd4befe4758b56be71224314af842d93d4d36c (diff)
downloadperlweeklychallenge-club-409efc7ff15a9c7cab87b5b9b85476e64067e6b7.tar.gz
perlweeklychallenge-club-409efc7ff15a9c7cab87b5b9b85476e64067e6b7.tar.bz2
perlweeklychallenge-club-409efc7ff15a9c7cab87b5b9b85476e64067e6b7.zip
Ch94 (Clojure): Task 1 & 2
Diffstat (limited to 'challenge-094')
-rw-r--r--challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/core.clj12
-rw-r--r--challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/t1.clj23
-rw-r--r--challenge-094/tyler-wardhaugh/clojure/src/tw/weekly/c94/t2.clj30
-rw-r--r--challenge-094/tyler-wardhaugh/clojure/test/tw/weekly/c94_test.clj19
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]]])))))