diff options
| author | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2022-02-05 22:43:11 -0800 |
|---|---|---|
| committer | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2022-02-05 22:43:11 -0800 |
| commit | 40cd181ea9567e8fed9fef944e9a8546a325937e (patch) | |
| tree | 6fa21c047202e7b1d9ab0baf1c4830b42023968e /challenge-150 | |
| parent | 1ab77707311e24b86ffcfe82d29e54b4b4f57928 (diff) | |
| download | perlweeklychallenge-club-40cd181ea9567e8fed9fef944e9a8546a325937e.tar.gz perlweeklychallenge-club-40cd181ea9567e8fed9fef944e9a8546a325937e.tar.bz2 perlweeklychallenge-club-40cd181ea9567e8fed9fef944e9a8546a325937e.zip | |
Ch150 (Clojure): Task 2
Diffstat (limited to 'challenge-150')
| -rw-r--r-- | challenge-150/tyler-wardhaugh/clojure/deps.edn | 2 | ||||
| -rw-r--r-- | challenge-150/tyler-wardhaugh/clojure/src/c150/t2.clj | 18 | ||||
| -rw-r--r-- | challenge-150/tyler-wardhaugh/clojure/test/c150/t2_test.clj | 27 |
3 files changed, 42 insertions, 5 deletions
diff --git a/challenge-150/tyler-wardhaugh/clojure/deps.edn b/challenge-150/tyler-wardhaugh/clojure/deps.edn index a2f0d1e166..f1e8a6e0ee 100644 --- a/challenge-150/tyler-wardhaugh/clojure/deps.edn +++ b/challenge-150/tyler-wardhaugh/clojure/deps.edn @@ -1,5 +1,5 @@ {:paths ["src" "resources"] - :deps {org.clojure/clojure {:mvn/version "1.11.0-alpha4"} + :deps {org.clojure/clojure {:mvn/version "1.11.0-beta1"} com.hypirion/primes {:mvn/version "0.2.2"}} :aliases {:t1 {:main-opts ["-m" "c150.t1"]} diff --git a/challenge-150/tyler-wardhaugh/clojure/src/c150/t2.clj b/challenge-150/tyler-wardhaugh/clojure/src/c150/t2.clj index e93ec5c2f7..c982dd76d2 100644 --- a/challenge-150/tyler-wardhaugh/clojure/src/c150/t2.clj +++ b/challenge-150/tyler-wardhaugh/clojure/src/c150/t2.clj @@ -2,7 +2,21 @@ (:require [clojure.math :as m] [clojure.pprint :refer [cl-format]])) -;(set! *warn-on-reflection* true) +(def TARGET 500) + +(defn prime-squares-upto + [ceiling] + (let [source (iterate #(.nextProbablePrime %) BigInteger/ONE) + xf (comp (drop 1) (take-while #(< % ceiling)) (map #(m/pow % 2)))] + (into [] xf source))) + +(defn square-free-ints + [n] + (let [prime-squares (prime-squares-upto (m/sqrt n)) + square-free? (fn [x] (not-any? #(zero? (rem x %)) prime-squares))] + (->> (range 1 (inc n)) + (filter square-free?)))) (defn -main - [& _]) + [& _] + (cl-format true "~{~<~%~1,78:;~A~;~^,~> ~}" (square-free-ints TARGET))) diff --git a/challenge-150/tyler-wardhaugh/clojure/test/c150/t2_test.clj b/challenge-150/tyler-wardhaugh/clojure/test/c150/t2_test.clj index 54d3d08aa2..8f59be9950 100644 --- a/challenge-150/tyler-wardhaugh/clojure/test/c150/t2_test.clj +++ b/challenge-150/tyler-wardhaugh/clojure/test/c150/t2_test.clj @@ -1,7 +1,30 @@ (ns c150.t2-test (:require [clojure.test :refer [deftest is testing]] - [c150.t2 :refer []])) + [c150.t2 :refer [square-free-ints]])) + +(def FIRST-500-SQUARE-FREE-INTS + [1, 2, 3, 5, 6, 7, 10, 11, 13, 14, 15, 17, 19, 21, 22, 23, 26, 29, 30, 31, + 33, 34, 35, 37, 38, 39, 41, 42, 43, 46, 47, 51, 53, 55, 57, 58, 59, 61, + 62, 65, 66, 67, 69, 70, 71, 73, 74, 77, 78, 79, 82, 83, 85, 86, 87, 89, + 91, 93, 94, 95, 97, 101, 102, 103, 105, 106, 107, 109, 110, 111, 113, + 114, 115, 118, 119, 122, 123, 127, 129, 130, 131, 133, 134, 137, 138, + 139, 141, 142, 143, 145, 146, 149, 151, 154, 155, 157, 158, 159, 161, + 163, 165, 166, 167, 170, 173, 174, 177, 178, 179, 181, 182, 183, 185, + 186, 187, 190, 191, 193, 194, 195, 197, 199, 201, 202, 203, 205, 206, + 209, 210, 211, 213, 214, 215, 217, 218, 219, 221, 222, 223, 226, 227, + 229, 230, 231, 233, 235, 237, 238, 239, 241, 246, 247, 249, 251, 253, + 254, 255, 257, 258, 259, 262, 263, 265, 266, 267, 269, 271, 273, 274, + 277, 278, 281, 282, 283, 285, 286, 287, 290, 291, 293, 295, 298, 299, + 301, 302, 303, 305, 307, 309, 310, 311, 313, 314, 317, 318, 319, 321, + 322, 323, 326, 327, 329, 330, 331, 334, 335, 337, 339, 341, 345, 346, + 347, 349, 353, 354, 355, 357, 358, 359, 362, 365, 366, 367, 370, 371, + 373, 374, 377, 379, 381, 382, 383, 385, 386, 389, 390, 391, 393, 394, + 395, 397, 398, 399, 401, 402, 403, 406, 407, 409, 410, 411, 413, 415, + 417, 418, 419, 421, 422, 426, 427, 429, 430, 431, 433, 434, 435, 437, + 438, 439, 442, 443, 445, 446, 447, 449, 451, 453, 454, 455, 457, 458, + 461, 462, 463, 465, 466, 467, 469, 470, 471, 473, 474, 478, 479, 481, + 482, 483, 485, 487, 489, 491, 493, 494, 497, 498, 499]) (deftest target (testing "Target identified in task description" - )) + (is (= FIRST-500-SQUARE-FREE-INTS (square-free-ints 500))))) |
