From 8b0b49b96f018452a4873bb52f41b69a24dc4d46 Mon Sep 17 00:00:00 2001 From: rkelkka Date: Sat, 27 Oct 2018 16:00:55 +0300 Subject: [PATCH 1/9] Fix travis build --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 455f3c0..45c29f6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: clojure -lein: lein2 -script: lein2 midje :config .midje-grading-config.clj +lein: lein +script: lein midje :config .midje-grading-config.clj jdk: - openjdk7 notifications: From 1a41efc81e07440fcde6ba8a8620c1ce59b328e6 Mon Sep 17 00:00:00 2001 From: rkelkka Date: Sat, 10 Nov 2018 22:48:09 +0200 Subject: [PATCH 2/9] Up to my-filter --- src/recursion.clj | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/src/recursion.clj b/src/recursion.clj index 95d77aa..8def82f 100644 --- a/src/recursion.clj +++ b/src/recursion.clj @@ -1,25 +1,56 @@ (ns recursion) +(defn my-sum [coll] + (if (empty? coll) + 0 + (+ (first coll) (my-sum (rest coll))))) + (defn product [coll] - :-) + (if (empty? coll) + 1 + (* (first coll) (product (rest coll))))) (defn singleton? [coll] - :-) + (if (empty? coll) + false + (empty? (rest coll)))) (defn my-last [coll] - :-) + (if (empty? coll) + nil + (if (singleton? coll) + (first coll) + (my-last (rest coll))))) + (defn max-element [a-seq] - :-) + (if (empty? a-seq) + nil + (if (singleton? a-seq) + (first a-seq) + (max (first a-seq) (max-element (rest a-seq)))))) (defn seq-max [seq-1 seq-2] - [:-]) + (if (= (count seq-1) (count seq-2)) + seq-2 + (if (> (count seq-1) (count seq-2)) + seq-1 + seq-2))) (defn longest-sequence [a-seq] - [:-]) + (if (empty? a-seq) + nil + (if (singleton? a-seq) + (first a-seq) + (seq-max (first a-seq) (longest-sequence (rest a-seq)))))) (defn my-filter [pred? a-seq] - [:-]) + (if (empty? a-seq) + () + (if (pred? (first a-seq)) + (cons (first a-seq) (my-filter pred? (rest a-seq))) + (my-filter pred? (rest a-seq))))) + (defn sequence-contains? [elem a-seq] :-) From 05d359bde795f1973b9d83e9e1ae65c571bfeaa3 Mon Sep 17 00:00:00 2001 From: rkelkka Date: Sat, 24 Nov 2018 21:12:27 +0200 Subject: [PATCH 3/9] Up to my-map --- src/recursion.clj | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/recursion.clj b/src/recursion.clj index 8def82f..93ede50 100644 --- a/src/recursion.clj +++ b/src/recursion.clj @@ -53,19 +53,44 @@ (defn sequence-contains? [elem a-seq] - :-) + (cond + (empty? a-seq) + false + (not (= elem (first a-seq))) + (sequence-contains? elem (rest a-seq)) + :else + true)) (defn my-take-while [pred? a-seq] - [:-]) + (if (empty? a-seq) + () + (if (pred? (first a-seq)) + (cons (first a-seq) (my-take-while pred? (rest a-seq))) + ()))) (defn my-drop-while [pred? a-seq] - [:-]) + (if (empty? a-seq) + () + (if (pred? (first a-seq)) + (my-drop-while pred? (rest a-seq)) + (seq a-seq)))) (defn seq= [a-seq b-seq] - :-) + (cond + (not (= (count a-seq) (count b-seq))) + false + (and (empty? a-seq) (empty? b-seq)) + true + (= (first a-seq) (first b-seq)) + (seq= (rest a-seq) (rest b-seq)) + :else + false)) (defn my-map [f seq-1 seq-2] - [:-]) + (if (and (empty? seq-2) (empty? seq-2)) + () + (cons (f (first seq-1) (first seq-2)) (my-map f (rest seq-1) (rest seq-2))))) + (defn power [n k] :-) From 8f6aee6b55d3fe6838dd61252923ad6273ca7d4c Mon Sep 17 00:00:00 2001 From: rkelkka Date: Sat, 24 Nov 2018 21:46:45 +0200 Subject: [PATCH 4/9] Up to fib --- src/recursion.clj | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/recursion.clj b/src/recursion.clj index 93ede50..cafc249 100644 --- a/src/recursion.clj +++ b/src/recursion.clj @@ -93,10 +93,26 @@ (defn power [n k] - :-) + (cond + (zero? n) + 0 + (zero? k) + 1 + :else + (* n (power n (dec k))))) + + + (defn fib [n] - :-) + (cond + (= n 0) + 0 + (= n 1) + 1 + :else + (+ (fib (- n 1)) + (fib (- n 2))))) (defn my-repeat [how-many-times what-to-repeat] [:-]) From 9cf35b656c8154c133fcd8c5e3232f5794542fe7 Mon Sep 17 00:00:00 2001 From: rkelkka Date: Sat, 1 Dec 2018 20:14:14 +0200 Subject: [PATCH 5/9] rotations --- src/recursion.clj | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/recursion.clj b/src/recursion.clj index cafc249..9ec7aaf 100644 --- a/src/recursion.clj +++ b/src/recursion.clj @@ -115,19 +115,35 @@ (fib (- n 2))))) (defn my-repeat [how-many-times what-to-repeat] - [:-]) + (cond + (= how-many-times -1) + () + (= how-many-times 0) + "" + :else + (cons what-to-repeat (my-repeat (dec how-many-times) what-to-repeat)))) (defn my-range [up-to] - [:-]) + (cond + (= up-to 0) + () + :else + (cons (dec up-to) (my-range (dec up-to))))) (defn tails [a-seq] - [:-]) + (if (empty? a-seq) + (list ());list adds the last empty '()' in the result + (cons (seq a-seq) (tails (rest a-seq))))) (defn inits [a-seq] - [:-]) + (if (empty? a-seq) + (list ()) + (cons (seq a-seq) (inits (reverse (rest (reverse a-seq))))))) (defn rotations [a-seq] - [:-]) + (if (empty? a-seq) + (list ()) + (concat (first (tails a-seq)) (rotations (inits (rest a-seq)))))) (defn my-frequencies-helper [freqs a-seq] [:-]) From 8b078fb974f774e6d8547413b237eb1f3089f95d Mon Sep 17 00:00:00 2001 From: rkelkka Date: Sat, 1 Dec 2018 20:35:41 +0200 Subject: [PATCH 6/9] rotations 2 --- src/recursion.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/recursion.clj b/src/recursion.clj index 9ec7aaf..a299d9c 100644 --- a/src/recursion.clj +++ b/src/recursion.clj @@ -143,7 +143,7 @@ (defn rotations [a-seq] (if (empty? a-seq) (list ()) - (concat (first (tails a-seq)) (rotations (inits (rest a-seq)))))) + (rest (map concat (tails a-seq) (reverse (inits a-seq)))))) (defn my-frequencies-helper [freqs a-seq] [:-]) From 2fa683555ed10f501f2103bd3733f229207d7fe9 Mon Sep 17 00:00:00 2001 From: rkelkka Date: Sat, 1 Dec 2018 21:41:21 +0200 Subject: [PATCH 7/9] my-frequencies --- src/recursion.clj | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/recursion.clj b/src/recursion.clj index a299d9c..bca6f55 100644 --- a/src/recursion.clj +++ b/src/recursion.clj @@ -145,11 +145,19 @@ (list ()) (rest (map concat (tails a-seq) (reverse (inits a-seq)))))) + (defn my-frequencies-helper [freqs a-seq] - [:-]) + (if (empty? a-seq) + freqs + (let [new-count (if (contains? freqs (first a-seq)) + (inc (get freqs (first a-seq))) + 1)] + (my-frequencies-helper (assoc freqs (first a-seq) new-count) (rest a-seq))))) (defn my-frequencies [a-seq] - [:-]) + (if (empty? a-seq) + '{} + (my-frequencies-helper {} a-seq))) (defn un-frequencies [a-map] [:-]) From 59b3ac7bb5465d4b236115f84e53717f071990e4 Mon Sep 17 00:00:00 2001 From: rkelkka Date: Sat, 1 Dec 2018 22:02:44 +0200 Subject: [PATCH 8/9] un-frequencies --- src/recursion.clj | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/recursion.clj b/src/recursion.clj index bca6f55..09d960c 100644 --- a/src/recursion.clj +++ b/src/recursion.clj @@ -159,8 +159,21 @@ '{} (my-frequencies-helper {} a-seq))) + +(defn un-frequencies-helper [a-seq a-map] + (if (empty? a-map) + a-seq + (un-frequencies-helper + (concat a-seq + (repeat (val (first a-map)) (key (first a-map)))) + (rest a-map)))) + + + (defn un-frequencies [a-map] - [:-]) + (if (empty? a-map) + () + (un-frequencies-helper () a-map))) (defn my-take [n coll] [:-]) From a504ef189690a5e5e25af9e0a72174f0496854de Mon Sep 17 00:00:00 2001 From: rkelkka Date: Sat, 1 Dec 2018 23:27:31 +0200 Subject: [PATCH 9/9] merge-sort --- src/recursion.clj | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/recursion.clj b/src/recursion.clj index 09d960c..79ce297 100644 --- a/src/recursion.clj +++ b/src/recursion.clj @@ -176,19 +176,50 @@ (un-frequencies-helper () a-map))) (defn my-take [n coll] - [:-]) + (if (or (= n 0) (empty? coll)) + () + (cons (first coll) (my-take (dec n) (rest coll))))) (defn my-drop [n coll] - [:-]) + (cond + (= n 0) + coll + (empty? coll) + () + :else + (my-drop (dec n) (rest coll)))) (defn halve [a-seq] - [:-]) + (if (singleton? a-seq) + (vector () (list(first a-seq))) + (let [count_halve (int (/ (count a-seq) 2))] + (vector (my-take count_halve a-seq) (my-drop count_halve a-seq))))) + (defn seq-merge [a-seq b-seq] - [:-]) + (cond + (empty? a-seq) + b-seq + (empty? b-seq) + a-seq + :else + (if (< (first a-seq) (first b-seq)) + ;a comes first, next round is rest a and full b + (cons (first a-seq) (seq-merge (rest a-seq) b-seq)) + ;else: b comes first, next round is full a and rest b + (cons (first b-seq) (seq-merge a-seq (rest b-seq)))))) + + (defn merge-sort [a-seq] - [:-]) + (cond + (or (empty? a-seq) (singleton? a-seq)) + a-seq + :else + (let [[first_half second_half] (halve a-seq)] + (seq-merge (merge-sort first_half) (merge-sort second_half))))) + + (defn split-into-monotonics [a-seq] [:-])