aboutsummaryrefslogtreecommitdiff
path: root/challenge-150
diff options
context:
space:
mode:
authorTyler Wardhaugh <tyler.wardhaugh@gmail.com>2022-02-05 22:43:11 -0800
committerTyler Wardhaugh <tyler.wardhaugh@gmail.com>2022-02-05 22:43:11 -0800
commit40cd181ea9567e8fed9fef944e9a8546a325937e (patch)
tree6fa21c047202e7b1d9ab0baf1c4830b42023968e /challenge-150
parent1ab77707311e24b86ffcfe82d29e54b4b4f57928 (diff)
downloadperlweeklychallenge-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.edn2
-rw-r--r--challenge-150/tyler-wardhaugh/clojure/src/c150/t2.clj18
-rw-r--r--challenge-150/tyler-wardhaugh/clojure/test/c150/t2_test.clj27
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)))))