aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-148/tyler-wardhaugh/clojure/README.md7
-rw-r--r--challenge-148/tyler-wardhaugh/clojure/bb.edn2
-rw-r--r--challenge-148/tyler-wardhaugh/clojure/build.clj19
-rw-r--r--challenge-148/tyler-wardhaugh/clojure/deps.edn4
-rw-r--r--challenge-148/tyler-wardhaugh/clojure/src/c148/t1.clj13
-rw-r--r--challenge-148/tyler-wardhaugh/clojure/src/c148/t2.clj30
-rw-r--r--challenge-148/tyler-wardhaugh/clojure/test/c148/t1_test.clj11
-rw-r--r--challenge-148/tyler-wardhaugh/clojure/test/c148/t2_test.clj14
8 files changed, 95 insertions, 5 deletions
diff --git a/challenge-148/tyler-wardhaugh/clojure/README.md b/challenge-148/tyler-wardhaugh/clojure/README.md
index 6d6c624fdc..ad07e31114 100644
--- a/challenge-148/tyler-wardhaugh/clojure/README.md
+++ b/challenge-148/tyler-wardhaugh/clojure/README.md
@@ -1,6 +1,6 @@
-# c147
+# c148
-The Weekly Challenge — #147 — Tyler Wardhaugh
+The Weekly Challenge — #148 — Tyler Wardhaugh
## Usage
@@ -12,6 +12,9 @@ Run Task #1:
# ... or ...
$ bb run task-1
+ # Alternatively, to run it via Babashka:
+ $ bb run task-1-bb
+
Run Task #2:
$ clojure -M:t2
diff --git a/challenge-148/tyler-wardhaugh/clojure/bb.edn b/challenge-148/tyler-wardhaugh/clojure/bb.edn
index fd8889d50b..8e5e3b49c6 100644
--- a/challenge-148/tyler-wardhaugh/clojure/bb.edn
+++ b/challenge-148/tyler-wardhaugh/clojure/bb.edn
@@ -72,7 +72,7 @@
:task (run-task-clj :t1 *command-line-args*)}
task-1-bb {:doc "Run Task 1 (via Babashka)"
- :task (bb-no-go :t1 *command-line-args*)}
+ :task (run-task-bb :t1 *command-line-args*)}
task-2 {:doc "Run Task 2 (via clojure)"
:task (run-task-clj :t2 *command-line-args*)}
diff --git a/challenge-148/tyler-wardhaugh/clojure/build.clj b/challenge-148/tyler-wardhaugh/clojure/build.clj
new file mode 100644
index 0000000000..09cad66424
--- /dev/null
+++ b/challenge-148/tyler-wardhaugh/clojure/build.clj
@@ -0,0 +1,19 @@
+(ns build
+ (:refer-clojure :exclude [test])
+ (:require [org.corfield.build :as bb]))
+
+(def lib 'net.clojars.c148/c148)
+(def version "0.1.0-SNAPSHOT")
+(def main 'c148.c148)
+
+(defn test "Run the tests." [opts]
+ (bb/run-tests opts))
+
+(def clean bb/clean)
+
+(defn ci "Run the CI pipeline of tests (and build the uberjar)." [opts]
+ (-> opts
+ (assoc :lib lib :version version :main main)
+ (bb/run-tests)
+ (bb/clean)
+ (bb/uber)))
diff --git a/challenge-148/tyler-wardhaugh/clojure/deps.edn b/challenge-148/tyler-wardhaugh/clojure/deps.edn
index ebc13b0949..a58ebaa80d 100644
--- a/challenge-148/tyler-wardhaugh/clojure/deps.edn
+++ b/challenge-148/tyler-wardhaugh/clojure/deps.edn
@@ -2,8 +2,8 @@
:deps {org.clojure/clojure {:mvn/version "1.11.0-alpha4"}
com.hypirion/primes {:mvn/version "0.2.2"}}
:aliases
- {:t1 {:main-opts ["-m" "c147.t1"]}
- :t2 {:main-opts ["-m" "c147.t2"]}
+ {:t1 {:main-opts ["-m" "c148.t1"]}
+ :t2 {:main-opts ["-m" "c148.t2"]}
:build {:deps {io.github.seancorfield/build-clj
{:git/tag "v0.6.3" :git/sha "9b8e09b"
;; since we're building an app uberjar, we do not
diff --git a/challenge-148/tyler-wardhaugh/clojure/src/c148/t1.clj b/challenge-148/tyler-wardhaugh/clojure/src/c148/t1.clj
new file mode 100644
index 0000000000..3857705204
--- /dev/null
+++ b/challenge-148/tyler-wardhaugh/clojure/src/c148/t1.clj
@@ -0,0 +1,13 @@
+(ns c148.t1
+ (:require [clojure.pprint :refer [cl-format]]
+ [clojure.string :as str]))
+
+(def TARGET 100)
+
+(defn eban?
+ [n]
+ (-> (cl-format nil "~r" n) (str/includes? "e") not))
+
+(defn -main
+ [& _]
+ (println (filter eban? (range (inc TARGET)))))
diff --git a/challenge-148/tyler-wardhaugh/clojure/src/c148/t2.clj b/challenge-148/tyler-wardhaugh/clojure/src/c148/t2.clj
new file mode 100644
index 0000000000..146d377ebc
--- /dev/null
+++ b/challenge-148/tyler-wardhaugh/clojure/src/c148/t2.clj
@@ -0,0 +1,30 @@
+(ns c148.t2
+ (:require [clojure.math :as m]
+ [clojure.pprint :refer [cl-format]]))
+
+;(set! *warn-on-reflection* true)
+(def DEFAULT-EPS 1e-6)
+(def MAX 100)
+
+(defn one-ish?
+ ([n] (one-ish? n DEFAULT-EPS))
+ ([n eps] (< (abs (- 1.0 n)) eps)))
+
+; equivalent formula, found at: https://math.stackexchange.com/a/1885139
+(defn cardano-triplet?
+ [a b c]
+ (one-ish? (- (+ (* 8 (m/pow a 3))
+ (* 15 (m/pow a 2))
+ (* 6 a))
+ (* 27 (m/pow b 2) c))))
+
+(def cardano-triplets
+ (for [a (range MAX)
+ b (range MAX)
+ c (range MAX)
+ :when (cardano-triplet? a b c)]
+ [a b c]))
+
+(defn -main
+ [& _]
+ (cl-format true "~{(~{~a~^, ~})~%~}" (take 5 cardano-triplets)))
diff --git a/challenge-148/tyler-wardhaugh/clojure/test/c148/t1_test.clj b/challenge-148/tyler-wardhaugh/clojure/test/c148/t1_test.clj
new file mode 100644
index 0000000000..4f76b7a226
--- /dev/null
+++ b/challenge-148/tyler-wardhaugh/clojure/test/c148/t1_test.clj
@@ -0,0 +1,11 @@
+(ns c148.t1-test
+ (:require [clojure.test :refer [deftest is testing]]
+ [c148.t1 :refer [eban? TARGET]]))
+
+(def EBAN-UPTO-100
+ "Eban Numbers up to 100 (source: https://oeis.org/A006933)"
+ [2, 4, 6, 30, 32, 34, 36, 40, 42, 44, 46, 50, 52, 54, 56, 60, 62, 64, 66])
+
+(deftest target
+ (testing "Target identified in task description"
+ (is (= EBAN-UPTO-100 (filter eban? (range (inc TARGET))) ))))
diff --git a/challenge-148/tyler-wardhaugh/clojure/test/c148/t2_test.clj b/challenge-148/tyler-wardhaugh/clojure/test/c148/t2_test.clj
new file mode 100644
index 0000000000..37830d6b3e
--- /dev/null
+++ b/challenge-148/tyler-wardhaugh/clojure/test/c148/t2_test.clj
@@ -0,0 +1,14 @@
+(ns c148.t2-test
+ (:require [clojure.test :refer [deftest is testing]]
+ [c148.t2 :refer [cardano-triplets]]))
+
+(def FIRST-FIVE-CARDANO-TRIPLETS
+ [[2 1 5]
+ [5 1 52]
+ [5 2 13]
+ [8 3 21]
+ [11 4 29]])
+
+(deftest target
+ (testing "Target identified in task description"
+ (is (= FIRST-FIVE-CARDANO-TRIPLETS (take 5 cardano-triplets)))))