From 893c0df6cfbcba79a61f63eebd168389ab8d5a9b Mon Sep 17 00:00:00 2001 From: Heui Park Date: Wed, 19 May 2021 20:25:10 -0700 Subject: [PATCH 01/11] start problem 4 --- spec/euler/level1/problem004_spec.clj | 14 ++++++++++++++ src/euler/level1/problem004.clj | 4 ++++ 2 files changed, 18 insertions(+) create mode 100644 spec/euler/level1/problem004_spec.clj create mode 100644 src/euler/level1/problem004.clj diff --git a/spec/euler/level1/problem004_spec.clj b/spec/euler/level1/problem004_spec.clj new file mode 100644 index 0000000..0d290a0 --- /dev/null +++ b/spec/euler/level1/problem004_spec.clj @@ -0,0 +1,14 @@ +(ns euler.level1.problem004-spec + (:require + [speclj.core :refer :all] + [euler.level1.problem004 :refer :all])) + +; https://projecteuler.net/problem=4 + +(describe "Euler Problem #4" + + (it "Solves #4" + (should= -1 (euler-4 -1))) + ) + +(run-specs) diff --git a/src/euler/level1/problem004.clj b/src/euler/level1/problem004.clj new file mode 100644 index 0000000..41d3ad5 --- /dev/null +++ b/src/euler/level1/problem004.clj @@ -0,0 +1,4 @@ +(ns euler.level1.problem004) + +(defn euler-4 [n] + ) From e0c90d0239d6ac4643bc1e17ee3ea8510590d663 Mon Sep 17 00:00:00 2001 From: Heui Park Date: Tue, 25 May 2021 08:00:38 -0500 Subject: [PATCH 02/11] finish problems 4, 6, 7, 8 --- project.clj | 3 ++- spec/euler/level1/problem004_spec.clj | 13 ++++++------- spec/euler/level1/problem006_spec.clj | 20 ++++++++++++++++++++ spec/euler/level1/problem007_spec.clj | 23 +++++++++++++++++++++++ spec/euler/level1/problem008_spec.clj | 14 ++++++++++++++ src/.DS_Store | Bin 0 -> 6148 bytes src/euler/level1/problem004.clj | 4 ++++ src/euler/level1/problem006.clj | 11 +++++++++++ src/euler/level1/problem007.clj | 25 +++++++++++++++++++++++++ src/euler/level1/problem008.clj | 21 +++++++++++++++++++++ 10 files changed, 126 insertions(+), 8 deletions(-) create mode 100644 spec/euler/level1/problem006_spec.clj create mode 100644 spec/euler/level1/problem007_spec.clj create mode 100644 spec/euler/level1/problem008_spec.clj create mode 100644 src/.DS_Store create mode 100644 src/euler/level1/problem006.clj create mode 100644 src/euler/level1/problem007.clj create mode 100644 src/euler/level1/problem008.clj diff --git a/project.clj b/project.clj index 31e6f8d..0538ff9 100644 --- a/project.clj +++ b/project.clj @@ -1,7 +1,8 @@ (defproject euler "1.0.0-SNAPSHOT" :description "Solutions to https://projecteuler.net" :dependencies [[org.clojure/clojure "1.10.1"] - [org.clojure/math.combinatorics "0.1.6"]] + [org.clojure/math.combinatorics "0.1.6"] + [org.clojure/math.numeric-tower "0.0.4"]] :profiles {:dev {:dependencies [[speclj "3.3.2"]]}} :plugins [[speclj "3.3.2"]] :test-paths ["spec/"] diff --git a/spec/euler/level1/problem004_spec.clj b/spec/euler/level1/problem004_spec.clj index 0d290a0..d7ed690 100644 --- a/spec/euler/level1/problem004_spec.clj +++ b/spec/euler/level1/problem004_spec.clj @@ -1,14 +1,13 @@ (ns euler.level1.problem004-spec - (:require - [speclj.core :refer :all] - [euler.level1.problem004 :refer :all])) + (:require + [speclj.core :refer :all] + [euler.level1.problem004 :refer :all])) ; https://projecteuler.net/problem=4 (describe "Euler Problem #4" - - (it "Solves #4" - (should= -1 (euler-4 -1))) - ) + (it "Solves Problem #4" + (should= -1 (euler-4 -1))) + ) (run-specs) diff --git a/spec/euler/level1/problem006_spec.clj b/spec/euler/level1/problem006_spec.clj new file mode 100644 index 0000000..c104814 --- /dev/null +++ b/spec/euler/level1/problem006_spec.clj @@ -0,0 +1,20 @@ +(ns euler.level1.problem006-spec + (:require + [speclj.core :refer :all] + [euler.level1.problem006 :refer :all])) + +; https://projecteuler.net/problem=6 + +(describe "Euler Problem #6" + + (it "Gets sum of the squares of the first n numbers" + (should= 385 (get-sum-squares 10)) + ) + (it "Gets square of the sum of the first n numbers" + (should= 3025 (get-square-sum 10)) + ) + (it "Solves #6" + (should= -1 (euler-6 100))) + ) + +(run-specs) diff --git a/spec/euler/level1/problem007_spec.clj b/spec/euler/level1/problem007_spec.clj new file mode 100644 index 0000000..42c02e6 --- /dev/null +++ b/spec/euler/level1/problem007_spec.clj @@ -0,0 +1,23 @@ +(ns euler.level1.problem007-spec + (:require + [speclj.core :refer :all] + [euler.level1.problem007 :refer :all])) + +; https://projecteuler.net/problem=7 + +(describe "Euler Problem #7" + (it "Checks if number is prime" + ;(should= false (prime? 6)) + ;(should= true (prime? 2)) + (should= true (prime? 3)) + ;(should= false (prime? 192)) + ;(should= true (prime? 29)) + ;(should= true (prime? 1)) + ) + + (it "Solves #7" + (should= -1 (euler-7 -1)) + ) + ) + +(run-specs) diff --git a/spec/euler/level1/problem008_spec.clj b/spec/euler/level1/problem008_spec.clj new file mode 100644 index 0000000..ab23d54 --- /dev/null +++ b/spec/euler/level1/problem008_spec.clj @@ -0,0 +1,14 @@ +(ns euler.level1.problem008-spec + (:require + [speclj.core :refer :all] + [euler.level1.problem008 :refer :all])) + +; https://projecteuler.net/problem=8 + +(describe "Euler Problem #8" + + (it "Solves #8" + (should= -1 (euler-8 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450))) + ) + +(run-specs) diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..66d8287a677203c8d24c39bdb7e695eb52daa8ef GIT binary patch literal 6148 zcmeHK%}N6?5Kj7|X+`Wou*Y1y_0U=sJP6BL58i|oJ*c$1>|z(z-O_F?S}Xe+`bIv1 zuj5RTmX<1b60tKd`6iQ@gnYYX62=&}hkk>x3S&%wBIZiad?7fFx+FQ{LF8(VzBd~5 zyeRROV#)D08NhE>WC0tp2-^AY_wMzgaFEvPA3T>Y6xY^;D2wuD`PS(sBPVs!;lOtL z*VsFE)2?UiizJC=w(DJn!Khu?K1t%#4dbA%l0!d$kejP8_LGsF3}b(w=5h3Z5G7G+ zSE}Rje)F&<4;sx$O^%QD>NN?D$)qH9b{ofMo%_e9@$=;6RWr-s7gVxka0+i=%x&?( z>BmtL-+_0UF^wc728aP-U_}@($Di0(k^Ry(i2-8Z=M3QaAVCo=gPBHkbU=gGM;tF8 zqJWKW2}EhoGMH(E5fH9Z0d*=jPYkZp!7ojmWiZpI(-~JQ!#rkXZeA!{tqy*v!Wp+T zQcDaF1B(pgb+>}`|MdI!|6&sLhyh~YUopT7EvIF}mP~D3+8owe3EBZg!MIH0ECmcz hiXj$DaTQbv_$3;EmcdLTctGePplG0m82D8NJ^=+;Q8xep literal 0 HcmV?d00001 diff --git a/src/euler/level1/problem004.clj b/src/euler/level1/problem004.clj index 41d3ad5..2853c5b 100644 --- a/src/euler/level1/problem004.clj +++ b/src/euler/level1/problem004.clj @@ -1,4 +1,8 @@ (ns euler.level1.problem004) (defn euler-4 [n] + (if (= 10 (first `(10))) + true + false + ) ) diff --git a/src/euler/level1/problem006.clj b/src/euler/level1/problem006.clj new file mode 100644 index 0000000..b542c19 --- /dev/null +++ b/src/euler/level1/problem006.clj @@ -0,0 +1,11 @@ +(ns euler.level1.problem006) + +(defn get-sum-squares [n] + (reduce + (map #(* % %) (range 1 (inc n))))) + +(defn get-square-sum [n] + (let [total (/ (* n (+ n 1)) 2) sum (* total total) ] sum)) + +(defn euler-6 [n] + (- (get-square-sum n) (get-sum-squares n)) + ) \ No newline at end of file diff --git a/src/euler/level1/problem007.clj b/src/euler/level1/problem007.clj new file mode 100644 index 0000000..fa19bff --- /dev/null +++ b/src/euler/level1/problem007.clj @@ -0,0 +1,25 @@ +(ns euler.level1.problem007 + (:require [clojure.math.numeric-tower :as math])) + +(defn prime? [n] + (loop [n n + k 1] + (if (<= (- (* 6 k) 1) (Math/floor (math/sqrt n))) + (cond + (= 0 (mod n (+ 1 (* 6 k)))) false + (= 0 (mod n (- 1 (* 6 k)))) false + :default (recur n (inc k)) + ) + (cond + (<= n 3) true + (= 0 (mod n 2)) false + (= 0 (mod n 3)) false + :default n + ) + ) + ) + ) + +(defn euler-7 [n] + (nth (drop 2(filter prime? (range 1e9))) (dec 10001)) + ) diff --git a/src/euler/level1/problem008.clj b/src/euler/level1/problem008.clj new file mode 100644 index 0000000..34e748c --- /dev/null +++ b/src/euler/level1/problem008.clj @@ -0,0 +1,21 @@ +(ns euler.level1.problem008) + +(defn char-to-int [coll] + (map #(Character/digit % 10) coll)) + +(defn product [coll] + (map #(reduce * %) coll)) + +(defn product-set [coll] + (apply sorted-set (product coll))) + +(defn get-product [n] + (let [digit (vec (str n)) + groupings (map #(into [] %) (partition 13 1 digit))] + (map char-to-int groupings) + )) + +(defn euler-8 [n] + (last(product-set (get-product n))) + + ) From f39c384c74be11d49558cd027c579af9338ae1ae Mon Sep 17 00:00:00 2001 From: Heui Park Date: Thu, 27 May 2021 07:49:38 -0700 Subject: [PATCH 03/11] redo problem 8 using tdd approach --- .lein-repl-history | 3 +++ .nrepl-port | 1 + spec/euler/level1/problem006_spec.clj | 2 +- spec/euler/level1/problem007_spec.clj | 12 +++++------ spec/euler/level1/problem008_spec.clj | 22 +++++++++++++++----- src/euler/level1/problem008.clj | 29 ++++++++++++++------------- 6 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 .lein-repl-history create mode 100644 .nrepl-port diff --git a/.lein-repl-history b/.lein-repl-history new file mode 100644 index 0000000..74037ce --- /dev/null +++ b/.lein-repl-history @@ -0,0 +1,3 @@ +(partition 3 1 `(1 2 3 4 5 6 7 8)) +(partition 4 1 `(1 2 3 4 5 6 7 8)) +(partition 3 1 `(1 2 3 4 5 )) diff --git a/.nrepl-port b/.nrepl-port new file mode 100644 index 0000000..91a5da8 --- /dev/null +++ b/.nrepl-port @@ -0,0 +1 @@ +53932 \ No newline at end of file diff --git a/spec/euler/level1/problem006_spec.clj b/spec/euler/level1/problem006_spec.clj index c104814..8e48373 100644 --- a/spec/euler/level1/problem006_spec.clj +++ b/spec/euler/level1/problem006_spec.clj @@ -14,7 +14,7 @@ (should= 3025 (get-square-sum 10)) ) (it "Solves #6" - (should= -1 (euler-6 100))) + (should= 25164150 (euler-6 100))) ) (run-specs) diff --git a/spec/euler/level1/problem007_spec.clj b/spec/euler/level1/problem007_spec.clj index 42c02e6..068a3cf 100644 --- a/spec/euler/level1/problem007_spec.clj +++ b/spec/euler/level1/problem007_spec.clj @@ -7,16 +7,16 @@ (describe "Euler Problem #7" (it "Checks if number is prime" - ;(should= false (prime? 6)) - ;(should= true (prime? 2)) + (should= false (prime? 6)) + (should= true (prime? 2)) (should= true (prime? 3)) - ;(should= false (prime? 192)) - ;(should= true (prime? 29)) - ;(should= true (prime? 1)) + (should= false (prime? 192)) + (should= 29 (prime? 29)) + (should= true (prime? 1)) ;;1 is not prime... ) (it "Solves #7" - (should= -1 (euler-7 -1)) + (should= 104743 (euler-7 -1)) ) ) diff --git a/spec/euler/level1/problem008_spec.clj b/spec/euler/level1/problem008_spec.clj index ab23d54..20fc188 100644 --- a/spec/euler/level1/problem008_spec.clj +++ b/spec/euler/level1/problem008_spec.clj @@ -1,14 +1,26 @@ (ns euler.level1.problem008-spec - (:require - [speclj.core :refer :all] - [euler.level1.problem008 :refer :all])) + (:require + [speclj.core :refer :all] + [euler.level1.problem008 :refer :all])) ; https://projecteuler.net/problem=8 (describe "Euler Problem #8" - (it "Solves #8" - (should= -1 (euler-8 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450))) + (it "converts n to vector of alphanumeric characters" + (should= `([\1 \2 \3] [\2 \3 \4] [\3 \4 \5] [\4 \5 \6]) (get-groupings 123456 3)) + (should= `([\1 \2 \3 \4] [\2 \3 \4 \5] [\3 \4 \5 \6] [\4 \5 \6 \7] [\5 \6 \7 \8]) (get-groupings 12345678 4)) + ) + (it "converts char groupings to int groupings" + (should= `([1 2 3] [2 3 4] [3 4 5]) (convert-to-int `([\1 \2 \3] [\2 \3 \4] [\3 \4 \5]))) + (should= `([1 2 3] [2 3 4] [3 4 5] [4 5 6]) (convert-to-int `([\1 \2 \3] [\2 \3 \4] [\3 \4 \5] [\4 \5 \6]))) + ) + (it "Gets the sorted set of products" + (should= #{6 24 60} (get-product-set `([1 2 3] [2 3 4] [3 4 5]))) + ) + + (it "Solves #8" + (should= -1 (euler-8 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450))) ) (run-specs) diff --git a/src/euler/level1/problem008.clj b/src/euler/level1/problem008.clj index 34e748c..6a3c104 100644 --- a/src/euler/level1/problem008.clj +++ b/src/euler/level1/problem008.clj @@ -1,21 +1,22 @@ (ns euler.level1.problem008) -(defn char-to-int [coll] - (map #(Character/digit % 10) coll)) +(defn get-groupings [n size] + (let [coll (vec (str n)) + n size + products (vec (str coll))] + (partition n 1 coll))) -(defn product [coll] - (map #(reduce * %) coll)) +(defn- char-to-digit [coll] + (map #(Character/digit % 10) coll)) -(defn product-set [coll] - (apply sorted-set (product coll))) +(defn convert-to-int [coll] + (map char-to-digit coll)) -(defn get-product [n] - (let [digit (vec (str n)) - groupings (map #(into [] %) (partition 13 1 digit))] - (map char-to-int groupings) - )) +(defn get-product-set [coll] + (apply sorted-set (map #(reduce * %) coll))) (defn euler-8 [n] - (last(product-set (get-product n))) - - ) + (->> (get-groupings n 13) + (convert-to-int) + (get-product-set) + (last))) From da569a7535388258c7d4b239561bf60bb6d8283f Mon Sep 17 00:00:00 2001 From: gosupark27 Date: Thu, 27 May 2021 09:40:32 -0700 Subject: [PATCH 04/11] Add euler problems 1 - 5 --- spec/euler/level1/problem001_spec.clj | 17 ++++++++++++-- spec/euler/level1/problem002_spec.clj | 34 +++++++++++++++++++++++++++ spec/euler/level1/problem003_spec.clj | 22 +++++++++++++++++ spec/euler/level1/problem004_spec.clj | 15 +++++++----- spec/euler/level1/problem005_spec.clj | 14 +++++++++++ src/euler/level1/problem001.clj | 10 ++++++++ src/euler/level1/problem002.clj | 23 ++++++++++++++++++ src/euler/level1/problem003.clj | 23 ++++++++++++++++++ src/euler/level1/problem004.clj | 24 +++++++++++++++---- src/euler/level1/problem005.clj | 28 ++++++++++++++++++++++ 10 files changed, 198 insertions(+), 12 deletions(-) create mode 100644 spec/euler/level1/problem002_spec.clj create mode 100644 spec/euler/level1/problem003_spec.clj create mode 100644 spec/euler/level1/problem005_spec.clj create mode 100644 src/euler/level1/problem002.clj create mode 100644 src/euler/level1/problem003.clj create mode 100644 src/euler/level1/problem005.clj diff --git a/spec/euler/level1/problem001_spec.clj b/spec/euler/level1/problem001_spec.clj index 83421ee..22bde0e 100644 --- a/spec/euler/level1/problem001_spec.clj +++ b/spec/euler/level1/problem001_spec.clj @@ -5,11 +5,24 @@ ; http://projecteuler.net/index.php?section=problems&id=1 +;; nonambiguous (describe "Euler Problem #1" - + (it "Multiple of 3 or 5" + (should= false (multiple-3-5? 1)) + (should= false (multiple-3-5? 2)) + (should= true (multiple-3-5? 3)) + (should= false (multiple-3-5? 4)) + (should= true (multiple-3-5? 5)) + (should= true (multiple-3-5? 6)) + (should= false (multiple-3-5? 7)) + (should= false (multiple-3-5? 8)) + (should= true (multiple-3-5? 9)) + (should= true (multiple-3-5? 10)) + ) (it "Solves #1" (should= 23 (euler-1 10)) - (should= -1 (euler-1 1000))) + (should= 233168 (euler-1 1000)) + ) ) (run-specs) diff --git a/spec/euler/level1/problem002_spec.clj b/spec/euler/level1/problem002_spec.clj new file mode 100644 index 0000000..af34e77 --- /dev/null +++ b/spec/euler/level1/problem002_spec.clj @@ -0,0 +1,34 @@ +(ns euler.level1.problem002-spec + (:use + [speclj.core] + [euler.level1.problem002]) + ) + +; https://projecteuler.net/problem=2 + +(describe "Euler Problem #2" + (it "Gets next fibonacci term" + (should= 1 (get-next-fib-term 1)) + (should= 2 (get-next-fib-term 2)) + (should= 3 (get-next-fib-term 3)) + (should= 5 (get-next-fib-term 4)) + ) + (it "Generates fibonacci sequence of length n" + (should= '(1) (get-fib-seq 1)) + (should= '(1 2) (get-fib-seq 2)) + (should= '(1 2 3) (get-fib-seq 3)) + (should= '(1 2 3 5) (get-fib-seq 4)) + ) + (it "Checks if number is even" + (should= false (is-even? 1)) + (should= true (is-even? 2)) + (should= false (is-even? 3)) + (should= true (is-even? 4)) + ) + (it "Solves #2" + (should= 10 (euler-2 5)) + (should= 4613732 (euler-2 33)) + ) + ) + +(run-specs) diff --git a/spec/euler/level1/problem003_spec.clj b/spec/euler/level1/problem003_spec.clj new file mode 100644 index 0000000..e20ab1a --- /dev/null +++ b/spec/euler/level1/problem003_spec.clj @@ -0,0 +1,22 @@ +(ns euler.level1.problem003-spec + (:require + [speclj.core :refer :all] + [euler.level1.problem003 :refer :all])) + +; https://projecteuler.net/problem=3 + +(describe "Euler Problem #3" + (it "Gets the next factor greater than 1" + (should= 2 (find-factor 10))) + + (it "Gets largest factor of n" + (should= 29 (get-max #{nil 7 13 29 5}))) + + (it "Gets a list of all the factors > 1 for n " + (should= #{nil 7 13 29 5} (factorialize 13195))) + + (it "Solves #3" + (should= 6857 (euler-3 600851475143))) + ) + +(run-specs) diff --git a/spec/euler/level1/problem004_spec.clj b/spec/euler/level1/problem004_spec.clj index d7ed690..0d4722f 100644 --- a/spec/euler/level1/problem004_spec.clj +++ b/spec/euler/level1/problem004_spec.clj @@ -1,13 +1,16 @@ (ns euler.level1.problem004-spec - (:require - [speclj.core :refer :all] - [euler.level1.problem004 :refer :all])) + (:require + [speclj.core :refer :all] + [euler.level1.problem004 :refer :all])) ; https://projecteuler.net/problem=4 (describe "Euler Problem #4" - (it "Solves Problem #4" - (should= -1 (euler-4 -1))) - ) + + (it "Solves #4" + (should= -1 (euler-4 -1))) + (it "returns true if number is a palindrome" + (should= true (is-palindrome? 5005))) +) (run-specs) diff --git a/spec/euler/level1/problem005_spec.clj b/spec/euler/level1/problem005_spec.clj new file mode 100644 index 0000000..653159e --- /dev/null +++ b/spec/euler/level1/problem005_spec.clj @@ -0,0 +1,14 @@ +(ns euler.level1.problem005-spec + (:require + [speclj.core :refer :all] + [euler.level1.problem005 :refer :all])) + +; https://projecteuler.net/problem=5 + +(describe "Euler Problem #5" + + (it "Solves #5" + (should= -1 (euler-5 -1))) + ) + +(run-specs) diff --git a/src/euler/level1/problem001.clj b/src/euler/level1/problem001.clj index 9458aa3..cde7ee8 100644 --- a/src/euler/level1/problem001.clj +++ b/src/euler/level1/problem001.clj @@ -1,4 +1,14 @@ (ns euler.level1.problem001) +(defn multiple-3-5? [n] + (cond + (= (mod n 3) 0) true + (= (mod n 5) 0) true + :else false) + ) + (defn euler-1 [n] + (reduce + (filter multiple-3-5? (range n))) ) + + diff --git a/src/euler/level1/problem002.clj b/src/euler/level1/problem002.clj new file mode 100644 index 0000000..14cb3cc --- /dev/null +++ b/src/euler/level1/problem002.clj @@ -0,0 +1,23 @@ +(ns euler.level1.problem002) + + + +(defn get-next-fib-term [n] + (if (< n 4) + n + (+ (get-next-fib-term (- n 1)) (get-next-fib-term (- n 2))) + )) + +(defn get-fib-seq [n] + (map get-next-fib-term (range 1 (+ n 1))) + ) + +(defn is-even? [n] + (if(= (mod n 2) 0) + true + false) + ) + +(defn euler-2 [n] + (reduce + (filter is-even? (get-fib-seq n))) + ) diff --git a/src/euler/level1/problem003.clj b/src/euler/level1/problem003.clj new file mode 100644 index 0000000..ec3a2ac --- /dev/null +++ b/src/euler/level1/problem003.clj @@ -0,0 +1,23 @@ +(ns euler.level1.problem003) + +(defn find-factor [n] + (->> (range 2 (inc n)) + (drop-while #(not(= 0 (mod n %)))) + (first))) + +(defn get-max [factors] + (->> (clojure.set/difference factors #{nil} ) + (apply max))) + +(defn factorialize [n] + (loop [n n + factors #{}] + (if (nil? n) + factors + (let [next (find-factor n) + quotient (if (nil? next) nil (/ n next))] + (recur quotient (conj factors next)))))) + +(defn euler-3 [n] + (->> (factorialize n) + (get-max))) diff --git a/src/euler/level1/problem004.clj b/src/euler/level1/problem004.clj index 2853c5b..4a38b2a 100644 --- a/src/euler/level1/problem004.clj +++ b/src/euler/level1/problem004.clj @@ -1,8 +1,24 @@ (ns euler.level1.problem004) -(defn euler-4 [n] - (if (= 10 (first `(10))) - true - false +(def prod (for [num-1 (vec (range 1 1000)) + num-2 (vec (range 1 1000))] + [num-1 num-2])) + +(def six-digit-products + (sort(set (map #(reduce * %) prod))) + ) + +(defn is-palindrome? [num] + (let [num (vec (str num)) + rev-num (vec (reverse num))] + (if (= 0 (compare num rev-num)) + true + false) ) ) + +(defn euler-4 [n] + (last (filter is-palindrome? six-digit-products)) + ) + + diff --git a/src/euler/level1/problem005.clj b/src/euler/level1/problem005.clj new file mode 100644 index 0000000..49c98ad --- /dev/null +++ b/src/euler/level1/problem005.clj @@ -0,0 +1,28 @@ +(ns euler.level1.problem005) + +(defn divisible [a b] + (mod a b)) + +;;(defn multiples [n] +;; (for [multipliers (vec (range 1 20))] +;; [n multipliers]) +;; ) +;; +;;(defn get-multiples [n] +;; (sort(set (map #(reduce * %) (multiples n))))) + +(defn is-evenly-divisible? [n] + (not(zero? (reduce + (map (partial divisible n) (range 1 21)))))) + +(defn find-min [multiple r] + (first (drop-while #(is-evenly-divisible? %) (drop 1 (range 0 1e9 multiple))))) +;;(defn test-m [n r] +;; (not= 0 (reduce + (map #(rem n %) (range 1 (inc r)))))) +;; +;;(defn find-m [multiple r] +;; (first (drop-while #(test-m % r) (drop 1 (range 0 1e9 multiple))))) + + +(defn euler-5 [n] + (find-min 2520 20) + ) From 61d9cf0495a6ac280ff48da340d5075177ec4dd3 Mon Sep 17 00:00:00 2001 From: Heui Park Date: Thu, 3 Jun 2021 18:12:00 -0700 Subject: [PATCH 05/11] need to fix find-all-triplets-below-n --- .nrepl-port | 1 - spec/euler/level1/problem008_spec.clj | 2 +- spec/euler/level1/problem009_spec.clj | 38 +++++++++++++++++++++++++++ src/euler/level1/problem009.clj | 20 ++++++++++++++ 4 files changed, 59 insertions(+), 2 deletions(-) delete mode 100644 .nrepl-port create mode 100644 spec/euler/level1/problem009_spec.clj create mode 100644 src/euler/level1/problem009.clj diff --git a/.nrepl-port b/.nrepl-port deleted file mode 100644 index 91a5da8..0000000 --- a/.nrepl-port +++ /dev/null @@ -1 +0,0 @@ -53932 \ No newline at end of file diff --git a/spec/euler/level1/problem008_spec.clj b/spec/euler/level1/problem008_spec.clj index 20fc188..92fb712 100644 --- a/spec/euler/level1/problem008_spec.clj +++ b/spec/euler/level1/problem008_spec.clj @@ -20,7 +20,7 @@ ) (it "Solves #8" - (should= -1 (euler-8 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450))) + (should= 23514624000 (euler-8 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450))) ) (run-specs) diff --git a/spec/euler/level1/problem009_spec.clj b/spec/euler/level1/problem009_spec.clj new file mode 100644 index 0000000..8fc17ac --- /dev/null +++ b/spec/euler/level1/problem009_spec.clj @@ -0,0 +1,38 @@ +(ns euler.level1.problem009-spec + (:require + [speclj.core :refer :all] + [euler.level1.problem009 :refer :all])) + +; https://projecteuler.net/problem=9 + +(describe "euler 9" + + (it "is pythagorean triplet?" + (should (pythagorean-triplet? [3 4 5])) + (should-not (pythagorean-triplet? [0 1 2]))) + + (it "sums to n" + (should-not (sums-to-n? 12 [1 2 3])) + (should (sums-to-n? 12 [3 4 5]))) + + (it "finds all triplets that sum to n" + (should= [] (find-all-triplets-below-n 0)) + (should= [[1 2 3]] (find-all-triplets-below-n 3)) + (should= [[1 2 3] [1 2 4] [1 3 4] [2 3 4]] (find-all-triplets-below-n 4)) + ) + + (it "find pythagorean triplets" + (should= [] (get-pythagorean-triplets 3)) + (should= [[3 4 5] [6 8 10]] (get-pythagorean-triplets 12)) + (should= [[3 4 5] [5 12 13] [6 8 10] [7 24 25] [8 15 17] [9 12 15] [12 16 20] [15 20 25]] (get-pythagorean-triplets 25)) + ) + +(it "solve euler #9" + (should= 60 (euler-9 12)) + (should= 480 (euler-9 24)) + (should= -1 (euler-9 1000)) + ) + ) + + +(run-specs) diff --git a/src/euler/level1/problem009.clj b/src/euler/level1/problem009.clj new file mode 100644 index 0000000..dca49ab --- /dev/null +++ b/src/euler/level1/problem009.clj @@ -0,0 +1,20 @@ +(ns euler.level1.problem009) + +(defn pythagorean-triplet? [[a b c]] + (= (Math/pow c 2) (+ (Math/pow a 2) (Math/pow b 2)))) + +(defn sums-to-n? [n triple] + (= n (apply + triple))) + +(defn find-all-triplets-below-n [n] + (let [nums (range 1 (inc n)) + triples (for [a nums b nums c nums] [a b c])] + (filter #(and (< (first %) (second %)) (< (second %) (last %)) (sums-to-n? n %)) (remove nil? triples)))) + +(defn get-pythagorean-triplets [n] + (let [triplets (find-all-triplets-below-n n)] + (filter #(pythagorean-triplet? %) triplets))) + +(defn euler-9 [n] + (apply * (get-pythagorean-triplets n))) + From 77775df4ed59075dae6571c1596226d32b76750e Mon Sep 17 00:00:00 2001 From: Heui Park Date: Thu, 3 Jun 2021 18:16:37 -0700 Subject: [PATCH 06/11] passes all tests --- spec/euler/level1/problem009_spec.clj | 2 +- src/euler/level1/problem009.clj | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/euler/level1/problem009_spec.clj b/spec/euler/level1/problem009_spec.clj index 8fc17ac..c2e998f 100644 --- a/spec/euler/level1/problem009_spec.clj +++ b/spec/euler/level1/problem009_spec.clj @@ -30,7 +30,7 @@ (it "solve euler #9" (should= 60 (euler-9 12)) (should= 480 (euler-9 24)) - (should= -1 (euler-9 1000)) + ;(should= -1 (euler-9 1000)) ) ) diff --git a/src/euler/level1/problem009.clj b/src/euler/level1/problem009.clj index dca49ab..0735498 100644 --- a/src/euler/level1/problem009.clj +++ b/src/euler/level1/problem009.clj @@ -8,13 +8,13 @@ (defn find-all-triplets-below-n [n] (let [nums (range 1 (inc n)) - triples (for [a nums b nums c nums] [a b c])] - (filter #(and (< (first %) (second %)) (< (second %) (last %)) (sums-to-n? n %)) (remove nil? triples)))) + triples (for [a nums b nums c nums :when (and (< a b) (< b c))] [a b c])] + (remove nil? triples))) (defn get-pythagorean-triplets [n] (let [triplets (find-all-triplets-below-n n)] (filter #(pythagorean-triplet? %) triplets))) (defn euler-9 [n] - (apply * (get-pythagorean-triplets n))) + (apply * (flatten (filter #(sums-to-n? n %) (get-pythagorean-triplets n))))) From 771e44faa1c895a1f9e78491607463b37675ef62 Mon Sep 17 00:00:00 2001 From: Heui Park Date: Thu, 3 Jun 2021 19:31:33 -0700 Subject: [PATCH 07/11] fresh start to euler 7 --- spec/euler/level1/problem007_spec.clj | 15 +-------------- spec/euler/level1/problem009_spec.clj | 2 +- src/euler/level1/problem007.clj | 21 +-------------------- 3 files changed, 3 insertions(+), 35 deletions(-) diff --git a/spec/euler/level1/problem007_spec.clj b/spec/euler/level1/problem007_spec.clj index 068a3cf..69967f2 100644 --- a/spec/euler/level1/problem007_spec.clj +++ b/spec/euler/level1/problem007_spec.clj @@ -5,19 +5,6 @@ ; https://projecteuler.net/problem=7 -(describe "Euler Problem #7" - (it "Checks if number is prime" - (should= false (prime? 6)) - (should= true (prime? 2)) - (should= true (prime? 3)) - (should= false (prime? 192)) - (should= 29 (prime? 29)) - (should= true (prime? 1)) ;;1 is not prime... - ) - - (it "Solves #7" - (should= 104743 (euler-7 -1)) - ) - ) +(describe "euler 7") (run-specs) diff --git a/spec/euler/level1/problem009_spec.clj b/spec/euler/level1/problem009_spec.clj index c2e998f..a98cccc 100644 --- a/spec/euler/level1/problem009_spec.clj +++ b/spec/euler/level1/problem009_spec.clj @@ -30,7 +30,7 @@ (it "solve euler #9" (should= 60 (euler-9 12)) (should= 480 (euler-9 24)) - ;(should= -1 (euler-9 1000)) + (should= 31875000 (euler-9 1000)) ) ) diff --git a/src/euler/level1/problem007.clj b/src/euler/level1/problem007.clj index fa19bff..7393f19 100644 --- a/src/euler/level1/problem007.clj +++ b/src/euler/level1/problem007.clj @@ -1,25 +1,6 @@ (ns euler.level1.problem007 (:require [clojure.math.numeric-tower :as math])) -(defn prime? [n] - (loop [n n - k 1] - (if (<= (- (* 6 k) 1) (Math/floor (math/sqrt n))) - (cond - (= 0 (mod n (+ 1 (* 6 k)))) false - (= 0 (mod n (- 1 (* 6 k)))) false - :default (recur n (inc k)) - ) - (cond - (<= n 3) true - (= 0 (mod n 2)) false - (= 0 (mod n 3)) false - :default n - ) - ) - ) - ) - (defn euler-7 [n] - (nth (drop 2(filter prime? (range 1e9))) (dec 10001)) + ) From 699a1cb74bfee078e7f9003358ff4b5d381af7b8 Mon Sep 17 00:00:00 2001 From: Heui Park Date: Fri, 4 Jun 2021 10:38:20 -0700 Subject: [PATCH 08/11] euler 9 perfect-square - all tests passing --- .lein-repl-history | 22 ++++++++++++++++++++++ .nrepl-port | 1 + spec/euler/level1/problem007_spec.clj | 17 +++++++++++++---- spec/euler/level1/problem009_spec.clj | 17 ++++++++++++++++- src/euler/level1/problem007.clj | 6 ++++++ src/euler/level1/problem009.clj | 4 ++++ 6 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 .nrepl-port diff --git a/.lein-repl-history b/.lein-repl-history index 74037ce..5ce2b08 100644 --- a/.lein-repl-history +++ b/.lein-repl-history @@ -1,3 +1,25 @@ (partition 3 1 `(1 2 3 4 5 6 7 8)) (partition 4 1 `(1 2 3 4 5 6 7 8)) (partition 3 1 `(1 2 3 4 5 )) +(Math/sqrt 5) +(Math/sqrt 4) +(def n (Math/sqrt 5)) +(def p (MAth/sqrt 4)) +(def p (Math/sqrt 4)) +(str n) +(first (str n)) +(second (str n)) +(nth (str n) 3) +(nth (str p) 3) +(nth (str n) 2) +(nth (str p) 2) +(defn tenth-zero? [n] (= \0 (nth (str n) 2))) +(tenth-zero? n) +(tenth-zero? p) +(tenth-zero? 113484) +(tenth-zero? 10.2) +(tenth-zero? 10.0) +(tenth-zero? 100.7) +(defn whole-num? [n] (zero? (- n (int n)))) +(whole-num? 2) +(whole-num? 2.1) diff --git a/.nrepl-port b/.nrepl-port new file mode 100644 index 0000000..ad7f125 --- /dev/null +++ b/.nrepl-port @@ -0,0 +1 @@ +62615 \ No newline at end of file diff --git a/spec/euler/level1/problem007_spec.clj b/spec/euler/level1/problem007_spec.clj index 69967f2..d367d8f 100644 --- a/spec/euler/level1/problem007_spec.clj +++ b/spec/euler/level1/problem007_spec.clj @@ -1,10 +1,19 @@ (ns euler.level1.problem007-spec - (:require - [speclj.core :refer :all] - [euler.level1.problem007 :refer :all])) + (:require + [speclj.core :refer :all] + [euler.level1.problem007 :refer :all])) ; https://projecteuler.net/problem=7 -(describe "euler 7") +(describe "euler 7" + (xit (it "gets nth prime" + (should= 2 (get-nth-prime 1)) + (should= 5 (get-nth-prime 3)) + )) + (it "checks if n is prime" + (should (prime? 2)) + (should-not (prime? 4)) + ) + ) (run-specs) diff --git a/spec/euler/level1/problem009_spec.clj b/spec/euler/level1/problem009_spec.clj index a98cccc..f3e5810 100644 --- a/spec/euler/level1/problem009_spec.clj +++ b/spec/euler/level1/problem009_spec.clj @@ -11,6 +11,16 @@ (should (pythagorean-triplet? [3 4 5])) (should-not (pythagorean-triplet? [0 1 2]))) + (it "check if c is perfect square" + (should (perfect-square? 0)) + (should (perfect-square? 1)) + (should-not (perfect-square? 2)) + (should-not (perfect-square? 3)) + (should (perfect-square? 4)) + (should-not (perfect-square? 5)) + (should (perfect-square? 9)) + ) + (it "sums to n" (should-not (sums-to-n? 12 [1 2 3])) (should (sums-to-n? 12 [3 4 5]))) @@ -19,20 +29,25 @@ (should= [] (find-all-triplets-below-n 0)) (should= [[1 2 3]] (find-all-triplets-below-n 3)) (should= [[1 2 3] [1 2 4] [1 3 4] [2 3 4]] (find-all-triplets-below-n 4)) + ;(should= [] (find-all-triplets-below-n 1000)) ;;881 --> ~440 ) (it "find pythagorean triplets" (should= [] (get-pythagorean-triplets 3)) (should= [[3 4 5] [6 8 10]] (get-pythagorean-triplets 12)) (should= [[3 4 5] [5 12 13] [6 8 10] [7 24 25] [8 15 17] [9 12 15] [12 16 20] [15 20 25]] (get-pythagorean-triplets 25)) + ;(should= [] (get-pythagorean-triplets 1000)) ) (it "solve euler #9" (should= 60 (euler-9 12)) (should= 480 (euler-9 24)) - (should= 31875000 (euler-9 1000)) + ;(println "1000 THIS ONE") + ;(should= 31875000 (euler-9 1000)) ) ) +;; pyth-triplet that sum to 1000: (200 375 425) n/2 should still get us the answer + (run-specs) diff --git a/src/euler/level1/problem007.clj b/src/euler/level1/problem007.clj index 7393f19..a27189f 100644 --- a/src/euler/level1/problem007.clj +++ b/src/euler/level1/problem007.clj @@ -1,6 +1,12 @@ (ns euler.level1.problem007 (:require [clojure.math.numeric-tower :as math])) +(defn prime? [n] + (zero? (count (filter #(true? %) (map (= 0 (mod n %) ) (range 1 (inc n))))))) + +(defn get-nth-prime [n] + 2) + (defn euler-7 [n] ) diff --git a/src/euler/level1/problem009.clj b/src/euler/level1/problem009.clj index 0735498..992a548 100644 --- a/src/euler/level1/problem009.clj +++ b/src/euler/level1/problem009.clj @@ -1,5 +1,9 @@ (ns euler.level1.problem009) +(defn perfect-square? [n] + (let [root (Math/sqrt n)] (zero? (- root (int root)))) + ) + (defn pythagorean-triplet? [[a b c]] (= (Math/pow c 2) (+ (Math/pow a 2) (Math/pow b 2)))) From f6519655f992ea0b228098c69e08235de3c2cd18 Mon Sep 17 00:00:00 2001 From: Heui Park Date: Fri, 4 Jun 2021 18:50:46 -0700 Subject: [PATCH 09/11] refactor euler 9 --- spec/euler/level1/problem009_spec.clj | 34 +++++++++++++-------------- src/euler/level1/problem009.clj | 17 +++++++------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/spec/euler/level1/problem009_spec.clj b/spec/euler/level1/problem009_spec.clj index f3e5810..ae5c926 100644 --- a/spec/euler/level1/problem009_spec.clj +++ b/spec/euler/level1/problem009_spec.clj @@ -11,7 +11,7 @@ (should (pythagorean-triplet? [3 4 5])) (should-not (pythagorean-triplet? [0 1 2]))) - (it "check if c is perfect square" + (it "check if c is a perfect square" (should (perfect-square? 0)) (should (perfect-square? 1)) (should-not (perfect-square? 2)) @@ -25,29 +25,27 @@ (should-not (sums-to-n? 12 [1 2 3])) (should (sums-to-n? 12 [3 4 5]))) - (it "finds all triplets that sum to n" - (should= [] (find-all-triplets-below-n 0)) - (should= [[1 2 3]] (find-all-triplets-below-n 3)) - (should= [[1 2 3] [1 2 4] [1 3 4] [2 3 4]] (find-all-triplets-below-n 4)) - ;(should= [] (find-all-triplets-below-n 1000)) ;;881 --> ~440 - ) - - (it "find pythagorean triplets" - (should= [] (get-pythagorean-triplets 3)) - (should= [[3 4 5] [6 8 10]] (get-pythagorean-triplets 12)) - (should= [[3 4 5] [5 12 13] [6 8 10] [7 24 25] [8 15 17] [9 12 15] [12 16 20] [15 20 25]] (get-pythagorean-triplets 25)) - ;(should= [] (get-pythagorean-triplets 1000)) + (it "maybe returns a pythagorean triplet" + (should-be-nil (maybe-p-triplet [1 2])) + (should= [3 4 5] (maybe-p-triplet [3 4])) + (should= [6 8 10] (maybe-p-triplet [6 8])) ) + (it "finds all triplets below n" + (should= [] (find-pythagorean-triplets-below-n 0)) + (should= [] (find-pythagorean-triplets-below-n 1)) + (should= [] (find-pythagorean-triplets-below-n 2)) + (should= [] (find-pythagorean-triplets-below-n 3)) + (should= [] (find-pythagorean-triplets-below-n 4)) + (should= [[3 4 5]] (find-pythagorean-triplets-below-n 5)) + (should= [[3 4 5] [6 8 10]] (find-pythagorean-triplets-below-n 10)) + ) + (it "solve euler #9" (should= 60 (euler-9 12)) (should= 480 (euler-9 24)) - ;(println "1000 THIS ONE") - ;(should= 31875000 (euler-9 1000)) + (should= 31875000 (euler-9 1000)) ) ) -;; pyth-triplet that sum to 1000: (200 375 425) n/2 should still get us the answer - - (run-specs) diff --git a/src/euler/level1/problem009.clj b/src/euler/level1/problem009.clj index 992a548..ab4a23d 100644 --- a/src/euler/level1/problem009.clj +++ b/src/euler/level1/problem009.clj @@ -10,15 +10,16 @@ (defn sums-to-n? [n triple] (= n (apply + triple))) -(defn find-all-triplets-below-n [n] - (let [nums (range 1 (inc n)) - triples (for [a nums b nums c nums :when (and (< a b) (< b c))] [a b c])] - (remove nil? triples))) +(defn maybe-p-triplet [[a b]] + (let [c (+ (* a a) (* b b))] + (if (perfect-square? c) + [a b (int (Math/sqrt c))]))) -(defn get-pythagorean-triplets [n] - (let [triplets (find-all-triplets-below-n n)] - (filter #(pythagorean-triplet? %) triplets))) +(defn find-pythagorean-triplets-below-n [n] + (let [nums (range 1 n) + triples (for [a nums b nums :when (< a b)] (maybe-p-triplet [a b]))] + (remove nil? triples))) (defn euler-9 [n] - (apply * (flatten (filter #(sums-to-n? n %) (get-pythagorean-triplets n))))) + (apply * (flatten (filter #(sums-to-n? n %) (find-pythagorean-triplets-below-n n))))) From 1760ae2487c057f6eadda7a249a6984e378d0dfe Mon Sep 17 00:00:00 2001 From: Heui Park Date: Sat, 5 Jun 2021 22:07:42 -0700 Subject: [PATCH 10/11] solve euler 7 --- spec/euler/level1/problem007_spec.clj | 23 ++++++++++++++++------- src/euler/level1/problem007.clj | 13 ++++++++----- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/spec/euler/level1/problem007_spec.clj b/spec/euler/level1/problem007_spec.clj index d367d8f..3ebbbad 100644 --- a/spec/euler/level1/problem007_spec.clj +++ b/spec/euler/level1/problem007_spec.clj @@ -6,14 +6,23 @@ ; https://projecteuler.net/problem=7 (describe "euler 7" - (xit (it "gets nth prime" - (should= 2 (get-nth-prime 1)) - (should= 5 (get-nth-prime 3)) - )) - (it "checks if n is prime" - (should (prime? 2)) - (should-not (prime? 4)) + + (it "check if n is not divisble" + (should (non-divisible? 3 2)) + (should-not (non-divisible? 4 2)) + (should (non-divisible? 4 3)) ) + (it "checks if n is prime" + (should (prime? 2)) + (should-not (prime? 4)) + ) + (it "solve euler 7" + (should= 2 (euler-7 1)) + (should= 5 (euler-7 3)) + (should= 7927 (euler-7 1001)) + (should= 104743 (euler-7 10001)) + ) + ) (run-specs) diff --git a/src/euler/level1/problem007.clj b/src/euler/level1/problem007.clj index a27189f..e2b78ce 100644 --- a/src/euler/level1/problem007.clj +++ b/src/euler/level1/problem007.clj @@ -1,12 +1,15 @@ (ns euler.level1.problem007 (:require [clojure.math.numeric-tower :as math])) -(defn prime? [n] - (zero? (count (filter #(true? %) (map (= 0 (mod n %) ) (range 1 (inc n))))))) +;(defn prime? [n] +; (zero? (count (filter #(true? %) (map #(= 0 (mod n %) ) (range 1 (inc n))))))) -(defn get-nth-prime [n] - 2) +(defn non-divisible? [n div] + (not (= 0 (mod n div)))) -(defn euler-7 [n] +(defn prime? [n] + (= 0 (count (filter #(false? (non-divisible? n %)) (range 2 (inc (int (Math/sqrt n)))))))) +(defn euler-7 [n] + (nth (filter #(prime? %) (drop 2 (range))) (dec n)) ) From d53639d517649f26f3fec115b7b3c0353588358a Mon Sep 17 00:00:00 2001 From: gosupark27 Date: Sat, 5 Jun 2021 22:12:53 -0700 Subject: [PATCH 11/11] add euler 10 --- .lein-repl-history | 26 ++++++++++++++++++++++++++ spec/euler/level1/problem010_spec.clj | 14 ++++++++++++++ src/euler/level1/problem010.clj | 4 ++++ 3 files changed, 44 insertions(+) create mode 100644 spec/euler/level1/problem010_spec.clj create mode 100644 src/euler/level1/problem010.clj diff --git a/.lein-repl-history b/.lein-repl-history index 74037ce..b4e9d08 100644 --- a/.lein-repl-history +++ b/.lein-repl-history @@ -1,3 +1,29 @@ (partition 3 1 `(1 2 3 4 5 6 7 8)) (partition 4 1 `(1 2 3 4 5 6 7 8)) (partition 3 1 `(1 2 3 4 5 )) +<<<<<<< Updated upstream +======= +(Math/sqrt 5) +(Math/sqrt 4) +(def n (Math/sqrt 5)) +(def p (MAth/sqrt 4)) +(def p (Math/sqrt 4)) +(str n) +(first (str n)) +(second (str n)) +(nth (str n) 3) +(nth (str p) 3) +(nth (str n) 2) +(nth (str p) 2) +(defn tenth-zero? [n] (= \0 (nth (str n) 2))) +(tenth-zero? n) +(tenth-zero? p) +(tenth-zero? 113484) +(tenth-zero? 10.2) +(tenth-zero? 10.0) +(tenth-zero? 100.7) +(defn whole-num? [n] (zero? (- n (int n)))) +(whole-num? 2) +(whole-num? 2.1) +lein euler 10 +>>>>>>> Stashed changes diff --git a/spec/euler/level1/problem010_spec.clj b/spec/euler/level1/problem010_spec.clj new file mode 100644 index 0000000..db661b9 --- /dev/null +++ b/spec/euler/level1/problem010_spec.clj @@ -0,0 +1,14 @@ +(ns euler.level1.problem010-spec + (:require + [speclj.core :refer :all] + [euler.level1.problem010 :refer :all])) + +; https://projecteuler.net/problem=10 + +(describe "Euler Problem #10" + + (it "Solves #10" + (should= -1 (euler-10 -1))) + ) + +(run-specs) diff --git a/src/euler/level1/problem010.clj b/src/euler/level1/problem010.clj new file mode 100644 index 0000000..4ca4306 --- /dev/null +++ b/src/euler/level1/problem010.clj @@ -0,0 +1,4 @@ +(ns euler.level1.problem010) + +(defn euler-10 [n] + )