diff --git a/extra/project-euler/072/072-tests.factor b/extra/project-euler/072/072-tests.factor new file mode 100644 index 0000000000..80a8949d0d --- /dev/null +++ b/extra/project-euler/072/072-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.072 tools.test ; +IN: project-euler.072.tests + +[ 303963552391 ] [ euler072 ] unit-test diff --git a/extra/project-euler/072/072.factor b/extra/project-euler/072/072.factor new file mode 100644 index 0000000000..de6312f2a7 --- /dev/null +++ b/extra/project-euler/072/072.factor @@ -0,0 +1,38 @@ +! Copyright (c) 2009 Guillaume Nargeot. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel math math.primes.factors math.ranges +project-euler.common sequences ; +IN: project-euler.072 + +! http://projecteuler.net/index.php?section=problems&id=072 + +! DESCRIPTION +! ----------- + +! Consider the fraction, n/d, where n and d are positive integers. +! If ndigits [ digit-factorial ] sigma ; + +: chain-length ( n -- n ) + 61 [ 2dup at* nip f = ] [ + 2dup dupd set-at [ digits-factorial-sum ] dip + ] while nip assoc-size ; + +PRIVATE> + +: euler074 ( -- answer ) + 1000000 [1,b] [ chain-length 60 = ] count ; + +! [ euler074 ] 10 ave-time +! 25134 ms ave run time - 31.96 SD (10 trials) + +SOLUTION: euler074 + diff --git a/extra/project-euler/085/085.factor b/extra/project-euler/085/085.factor index 6c70f65bf7..9c12367cdf 100644 --- a/extra/project-euler/085/085.factor +++ b/extra/project-euler/085/085.factor @@ -19,7 +19,7 @@ IN: project-euler.085 ! SOLUTION ! -------- -! A grid measuring x by y contains x * (x + 1) * y * (x + 1) rectangles. +! A grid measuring x by y contains x * (x + 1) * y * (x + 1) / 4 rectangles. area-of-nearest ; ! [ euler085 ] 100 ave-time -! 2285 ms ave run time - 4.8 SD (100 trials) +! 791 ms ave run time - 17.15 SD (100 trials) SOLUTION: euler085 diff --git a/extra/project-euler/124/124-tests.factor b/extra/project-euler/124/124-tests.factor new file mode 100644 index 0000000000..cdbb5afc18 --- /dev/null +++ b/extra/project-euler/124/124-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.124 tools.test ; +IN: project-euler.124.tests + +[ 21417 ] [ euler124 ] unit-test diff --git a/extra/project-euler/124/124.factor b/extra/project-euler/124/124.factor new file mode 100644 index 0000000000..0f4d1ee28f --- /dev/null +++ b/extra/project-euler/124/124.factor @@ -0,0 +1,63 @@ +! Copyright (c) 2009 Guillaume Nargeot. +! See http://factorcode.org/license.txt for BSD license. +USING: arrays kernel math.primes.factors +math.ranges project-euler.common sequences sorting ; +IN: project-euler.124 + +! http://projecteuler.net/index.php?section=problems&id=124 + +! DESCRIPTION +! ----------- + +! The radical of n, rad(n), is the product of distinct prime factors of n. +! For example, 504 = 2^3 × 3^2 × 7, so rad(504) = 2 × 3 × 7 = 42. + +! If we calculate rad(n) for 1 ≤ n ≤ 10, then sort them on rad(n), +! and sorting on n if the radical values are equal, we get: + +! Unsorted Sorted +! n rad(n) n rad(n) k +! 1 1 1 1 1 +! 2 2 2 2 2 +! 3 3 4 2 3 +! 4 2 8 2 4 +! 5 5 3 3 5 +! 6 6 9 3 6 +! 7 7 5 5 7 +! 8 2 6 6 8 +! 9 3 7 7 9 +! 10 10 10 10 10 + +! Let E(k) be the kth element in the sorted n column; for example, +! E(4) = 8 and E(6) = 9. + +! If rad(n) is sorted for 1 ≤ n ≤ 100000, find E(10000). + + +! SOLUTION +! -------- + + + +: euler124 ( -- answer ) + 10000 (euler124) nth first ; + +! [ euler124 ] 100 ave-time +! 373 ms ave run time - 17.61 SD (100 trials) + +! TODO: instead of the brute-force method, making the rad +! array in the way of the sieve of eratosthene would scale +! better on bigger values. + +SOLUTION: euler124 diff --git a/extra/project-euler/project-euler.factor b/extra/project-euler/project-euler.factor index f0e40674da..1bba3182d1 100644 --- a/extra/project-euler/project-euler.factor +++ b/extra/project-euler/project-euler.factor @@ -17,13 +17,14 @@ USING: definitions io io.files io.pathnames kernel math math.parser project-euler.049 project-euler.052 project-euler.053 project-euler.054 project-euler.055 project-euler.056 project-euler.057 project-euler.058 project-euler.059 project-euler.063 project-euler.067 project-euler.069 - project-euler.071 project-euler.073 project-euler.075 project-euler.076 - project-euler.079 project-euler.085 project-euler.092 project-euler.097 - project-euler.099 project-euler.100 project-euler.102 project-euler.112 - project-euler.116 project-euler.117 project-euler.134 project-euler.148 - project-euler.150 project-euler.151 project-euler.164 project-euler.169 - project-euler.173 project-euler.175 project-euler.186 project-euler.190 - project-euler.203 project-euler.215 ; + project-euler.071 project-euler.072 project-euler.073 project-euler.074 + project-euler.075 project-euler.076 project-euler.079 project-euler.085 + project-euler.092 project-euler.097 project-euler.099 project-euler.100 + project-euler.102 project-euler.112 project-euler.116 project-euler.117 + project-euler.124 project-euler.134 project-euler.148 project-euler.150 + project-euler.151 project-euler.164 project-euler.169 project-euler.173 + project-euler.175 project-euler.186 project-euler.190 project-euler.203 + project-euler.215 ; IN: project-euler