Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

one-function-to-rule-them-all #514

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,5 @@ pom.xml
.lein-deps-sum
.lein-failures
.lein-plugins
.lein-repl-history
/.idea
1 change: 1 addition & 0 deletions .nrepl-port
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
43001
69 changes: 69 additions & 0 deletions one-function-to-rule-them-all-1.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<module cursive.leiningen.project.LeiningenProjectsManager.displayName="one-function-to-rule-them-all:1.0.0-SNAPSHOT" cursive.leiningen.project.LeiningenProjectsManager.isLeinModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/dev-resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Leiningen: bultitude:0.1.7" level="project" />
<orderEntry type="library" name="Leiningen: classlojure:0.6.6" level="project" />
<orderEntry type="library" name="Leiningen: clojure-complete:0.2.4" level="project" />
<orderEntry type="library" name="Leiningen: colorize:0.1.1" level="project" />
<orderEntry type="library" name="Leiningen: com.cemerick/pomegranate:0.0.13" level="project" />
<orderEntry type="library" name="Leiningen: commons-codec:1.6" level="project" />
<orderEntry type="library" name="Leiningen: commons-io:2.0.1" level="project" />
<orderEntry type="library" name="Leiningen: commons-logging:1.1.1" level="project" />
<orderEntry type="library" name="Leiningen: gui-diff:0.3.9" level="project" />
<orderEntry type="library" name="Leiningen: iloveponies.tests/one-function-to-rule-them-all:0.1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Leiningen: joda-time:2.0" level="project" />
<orderEntry type="library" name="Leiningen: leiningen-core:2.0.0-preview10" level="project" />
<orderEntry type="library" name="Leiningen: midje-grader:0.1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Leiningen: midje:1.5.1" level="project" />
<orderEntry type="library" name="Leiningen: ordered:1.2.0" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.httpcomponents/httpclient:4.1.2" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.httpcomponents/httpcore:4.1.2" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven.wagon/wagon-http-shared4:2.2" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven.wagon/wagon-http:2.2" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven.wagon/wagon-provider-api:2.2" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven/maven-aether-provider:3.0.4" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven/maven-model-builder:3.0.4" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven/maven-model:3.0.4" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven/maven-repository-metadata:3.0.4" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/algo.monads:0.1.0" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/clojure:1.5.1" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/core.incubator:0.1.0" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/core.unify:0.5.2" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/data.json:0.2.3" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/math.combinatorics:0.0.1" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/tools.macro:0.1.1" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/tools.namespace:0.2.2" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/tools.nrepl:0.2.12" level="project" />
<orderEntry type="library" name="Leiningen: org.codehaus.plexus/plexus-classworlds:2.4" level="project" />
<orderEntry type="library" name="Leiningen: org.codehaus.plexus/plexus-component-annotations:1.5.5" level="project" />
<orderEntry type="library" name="Leiningen: org.codehaus.plexus/plexus-interpolation:1.14" level="project" />
<orderEntry type="library" name="Leiningen: org.codehaus.plexus/plexus-utils:2.0.7" level="project" />
<orderEntry type="library" name="Leiningen: org.jsoup/jsoup:1.6.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-api:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-connector-file:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-connector-wagon:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-impl:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-spi:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-util:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.sisu/sisu-guice:3.0.3:no_aop" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.sisu/sisu-inject-bean:2.2.3" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.sisu/sisu-inject-plexus:2.2.3" level="project" />
<orderEntry type="library" name="Leiningen: robert/hooke:1.1.2" level="project" />
<orderEntry type="library" name="Leiningen: slingshot:0.10.3" level="project" />
<orderEntry type="library" name="Leiningen: swiss-arrows:0.1.0" level="project" />
<orderEntry type="library" name="Leiningen: useful:0.8.3-alpha8" level="project" />
<orderEntry type="library" name="Leiningen: utilize:0.2.3" level="project" />
</component>
</module>
69 changes: 69 additions & 0 deletions one-function-to-rule-them-all.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<module cursive.leiningen.project.LeiningenProjectsManager.displayName="one-function-to-rule-them-all:1.0.0-SNAPSHOT" cursive.leiningen.project.LeiningenProjectsManager.isLeinModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/dev-resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Leiningen: bultitude:0.1.7" level="project" />
<orderEntry type="library" name="Leiningen: classlojure:0.6.6" level="project" />
<orderEntry type="library" name="Leiningen: clojure-complete:0.2.4" level="project" />
<orderEntry type="library" name="Leiningen: colorize:0.1.1" level="project" />
<orderEntry type="library" name="Leiningen: com.cemerick/pomegranate:0.0.13" level="project" />
<orderEntry type="library" name="Leiningen: commons-codec:1.6" level="project" />
<orderEntry type="library" name="Leiningen: commons-io:2.0.1" level="project" />
<orderEntry type="library" name="Leiningen: commons-logging:1.1.1" level="project" />
<orderEntry type="library" name="Leiningen: gui-diff:0.3.9" level="project" />
<orderEntry type="library" name="Leiningen: iloveponies.tests/one-function-to-rule-them-all:0.1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Leiningen: joda-time:2.0" level="project" />
<orderEntry type="library" name="Leiningen: leiningen-core:2.0.0-preview10" level="project" />
<orderEntry type="library" name="Leiningen: midje-grader:0.1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Leiningen: midje:1.5.1" level="project" />
<orderEntry type="library" name="Leiningen: ordered:1.2.0" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.httpcomponents/httpclient:4.1.2" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.httpcomponents/httpcore:4.1.2" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven.wagon/wagon-http-shared4:2.2" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven.wagon/wagon-http:2.2" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven.wagon/wagon-provider-api:2.2" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven/maven-aether-provider:3.0.4" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven/maven-model-builder:3.0.4" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven/maven-model:3.0.4" level="project" />
<orderEntry type="library" name="Leiningen: org.apache.maven/maven-repository-metadata:3.0.4" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/algo.monads:0.1.0" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/clojure:1.5.1" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/core.incubator:0.1.0" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/core.unify:0.5.2" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/data.json:0.2.3" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/math.combinatorics:0.0.1" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/tools.macro:0.1.1" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/tools.namespace:0.2.2" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/tools.nrepl:0.2.12" level="project" />
<orderEntry type="library" name="Leiningen: org.codehaus.plexus/plexus-classworlds:2.4" level="project" />
<orderEntry type="library" name="Leiningen: org.codehaus.plexus/plexus-component-annotations:1.5.5" level="project" />
<orderEntry type="library" name="Leiningen: org.codehaus.plexus/plexus-interpolation:1.14" level="project" />
<orderEntry type="library" name="Leiningen: org.codehaus.plexus/plexus-utils:2.0.7" level="project" />
<orderEntry type="library" name="Leiningen: org.jsoup/jsoup:1.6.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-api:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-connector-file:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-connector-wagon:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-impl:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-spi:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.aether/aether-util:1.13.1" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.sisu/sisu-guice:3.0.3:no_aop" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.sisu/sisu-inject-bean:2.2.3" level="project" />
<orderEntry type="library" name="Leiningen: org.sonatype.sisu/sisu-inject-plexus:2.2.3" level="project" />
<orderEntry type="library" name="Leiningen: robert/hooke:1.1.2" level="project" />
<orderEntry type="library" name="Leiningen: slingshot:0.10.3" level="project" />
<orderEntry type="library" name="Leiningen: swiss-arrows:0.1.0" level="project" />
<orderEntry type="library" name="Leiningen: useful:0.8.3-alpha8" level="project" />
<orderEntry type="library" name="Leiningen: utilize:0.2.3" level="project" />
</component>
</module>
114 changes: 95 additions & 19 deletions src/one_function_to_rule_them_all.clj
Original file line number Diff line number Diff line change
@@ -1,43 +1,119 @@
(ns one-function-to-rule-them-all)

(defn concat-elements [a-seq]
:-)
(reduce
concat
()
a-seq))

(defn str-cat [a-seq]
:-)
(if (empty? a-seq)
""
(reduce
(fn [word1 word2] (str word1 " " word2))
a-seq)))


(defn my-interpose [x a-seq]
[:-])
(if (empty? a-seq)
'()
(reduce
(fn [item1 item2]
(conj item1 x item2))
(conj '() (first (reverse a-seq)))
(rest (reverse a-seq)))))

(defn my-count [a-seq]
:-)
(reduce
(fn [counter elem] (inc counter))
0
a-seq))

(defn my-reverse [a-seq]
[:-])
(reduce
#(conj %1 %2)
'()
a-seq))

(defn min-max-element [a-seq]
[:-])
(if (empty? a-seq)
[]
(reduce
(fn [min-max-vec number]
(if (< number (first min-max-vec))
[number (second min-max-vec)]
(if (> number (second min-max-vec))
[(first min-max-vec) number]
min-max-vec)))
[(first a-seq) (first a-seq)]
a-seq)))

(defn insert [sorted-seq n]
[:-])
(concat
(take-while
(fn [x] (< x n))
sorted-seq)
(conj () n)
(drop-while
(fn [x] (< x n))
sorted-seq)))

(defn insertion-sort [a-seq]
[:-])
(if (empty? a-seq)
'()
(reduce
(fn [sorted-seq elem]
(insert sorted-seq elem))
[]
a-seq)))

(defn parity [a-seq]
[:-])
(if (empty? a-seq)
#{}
(reduce
(fn [the-set elem]
(if (contains? the-set elem)
(disj the-set elem)
(conj the-set elem)))
#{}
a-seq)))

(defn minus
([x] (* -1 x))
([x y] (- x y)))

(defn count-params
([] 0)
([x] 1)
([x & more] (+ 1 (count more))))

(defn minus [x]
:-)

(defn count-params [x]
:-)
(defn my-*
([] 1)
([x] x)
([x y] (* x y))
([x y & more]
(reduce
#(* %1 %2)
(* x y)
more)))

(defn my-* [x]
:-)
(defn pred-and
([] (fn [elem] true))
([x] x)
([x & more]
(reduce
(fn [preds the-pred]
(fn [elem]
(and (preds elem) (the-pred elem))))
(fn [elem] (x elem))
more)))

(defn pred-and [x]
(fn [x] :-))
(defn my-map
([f a-seq]
(reduce
(fn [a b]
(conj a (f b)))
'()
(reverse a-seq))))

(defn my-map [f a-seq]
[:-])