From 372f5a0356160acd39e64dba3aafeec710eb7653 Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Mon, 17 Jan 2022 16:10:20 -0800 Subject: Ch148 (Clojure): prep for challenge --- challenge-148/tyler-wardhaugh/clojure/README.md | 4 ++-- challenge-148/tyler-wardhaugh/clojure/build.clj | 19 +++++++++++++++++++ challenge-148/tyler-wardhaugh/clojure/deps.edn | 4 ++-- 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 challenge-148/tyler-wardhaugh/clojure/build.clj diff --git a/challenge-148/tyler-wardhaugh/clojure/README.md b/challenge-148/tyler-wardhaugh/clojure/README.md index 6d6c624fdc..5b17ca2536 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 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 -- cgit From 943327d71a4e773266e54f88289b52d3624fefcf Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Mon, 17 Jan 2022 16:25:11 -0800 Subject: Ch148 (Clojure): Task #1 --- challenge-148/tyler-wardhaugh/clojure/README.md | 3 +++ challenge-148/tyler-wardhaugh/clojure/bb.edn | 2 +- challenge-148/tyler-wardhaugh/clojure/src/c148/t1.clj | 13 +++++++++++++ challenge-148/tyler-wardhaugh/clojure/test/c148/t1_test.clj | 11 +++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 challenge-148/tyler-wardhaugh/clojure/src/c148/t1.clj create mode 100644 challenge-148/tyler-wardhaugh/clojure/test/c148/t1_test.clj diff --git a/challenge-148/tyler-wardhaugh/clojure/README.md b/challenge-148/tyler-wardhaugh/clojure/README.md index 5b17ca2536..ad07e31114 100644 --- a/challenge-148/tyler-wardhaugh/clojure/README.md +++ b/challenge-148/tyler-wardhaugh/clojure/README.md @@ -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/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/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))) )))) -- cgit From 2103e2af70b2670555eacbf9f4a78613eda3c5b6 Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Sat, 22 Jan 2022 17:56:06 -0800 Subject: Ch148 (Clojure): Task #2 --- .../tyler-wardhaugh/clojure/src/c148/t2.clj | 30 ++++++++++++++++++++++ .../tyler-wardhaugh/clojure/test/c148/t2_test.clj | 14 ++++++++++ 2 files changed, 44 insertions(+) create mode 100644 challenge-148/tyler-wardhaugh/clojure/src/c148/t2.clj create mode 100644 challenge-148/tyler-wardhaugh/clojure/test/c148/t2_test.clj 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/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))))) -- cgit