Merge branch 'master' of git://projects.elasticdog.com/git/factor

db4
Slava Pestov 2008-11-06 02:00:08 -06:00
commit 4c226c7813
145 changed files with 561 additions and 241 deletions

View File

@ -1,7 +1,7 @@
! Copyright (C) 2008 Doug Coleman, Slava Pestov. ! Copyright (C) 2008 Doug Coleman, Slava Pestov, Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math math.constants math.functions math.intervals USING: combinators.short-circuit kernel math math.constants math.functions
math.vectors namespaces sequences combinators.short-circuit ; math.vectors sequences ;
IN: math.analysis IN: math.analysis
<PRIVATE <PRIVATE
@ -14,7 +14,7 @@ IN: math.analysis
: gamma-p6 : gamma-p6
{ {
2.50662827563479526904 225.525584619175212544 -268.295973841304927459 2.50662827563479526904 225.525584619175212544 -268.295973841304927459
80.9030806934622512966 -5.00757863970517583837 0.0114684895434781459556 80.9030806934622512966 -5.00757863970517583837 0.0114684895434781459556
} ; inline } ; inline
: gamma-z ( x n -- seq ) : gamma-z ( x n -- seq )
@ -22,16 +22,16 @@ IN: math.analysis
: (gamma-lanczos6) ( x -- log[gamma[x+1]] ) : (gamma-lanczos6) ( x -- log[gamma[x+1]] )
#! log(gamma(x+1) #! log(gamma(x+1)
[ 0.5 + dup gamma-g6 + dup [ log * ] dip - ] [ 0.5 + dup gamma-g6 + [ log * ] keep - ]
[ 6 gamma-z gamma-p6 v. log ] bi + ; [ 6 gamma-z gamma-p6 v. log ] bi + ;
: gamma-lanczos6 ( x -- gamma[x] ) : gamma-lanczos6 ( x -- gamma[x] )
#! gamma(x) = gamma(x+1) / x #! gamma(x) = gamma(x+1) / x
dup (gamma-lanczos6) exp swap / ; [ (gamma-lanczos6) exp ] keep / ;
: gammaln-lanczos6 ( x -- gammaln[x] ) : gammaln-lanczos6 ( x -- gammaln[x] )
#! log(gamma(x)) = log(gamma(x+1)) - log(x) #! log(gamma(x)) = log(gamma(x+1)) - log(x)
dup (gamma-lanczos6) swap log - ; [ (gamma-lanczos6) ] keep log - ;
: gamma-neg ( gamma[abs[x]] x -- gamma[x] ) : gamma-neg ( gamma[abs[x]] x -- gamma[x] )
dup pi * sin * * pi neg swap / ; inline dup pi * sin * * pi neg swap / ; inline
@ -42,22 +42,22 @@ PRIVATE>
#! gamma(x) = integral 0..inf [ t^(x-1) exp(-t) ] dt #! gamma(x) = integral 0..inf [ t^(x-1) exp(-t) ] dt
#! gamma(n+1) = n! for n > 0 #! gamma(n+1) = n! for n > 0
dup { [ 0.0 <= ] [ 1.0 mod zero? ] } 1&& [ dup { [ 0.0 <= ] [ 1.0 mod zero? ] } 1&& [
drop 1./0. drop 1./0.
] [ ] [
dup abs gamma-lanczos6 swap dup 0 > [ drop ] [ gamma-neg ] if [ abs gamma-lanczos6 ] keep dup 0 > [ drop ] [ gamma-neg ] if
] if ; ] if ;
: gammaln ( x -- gamma[x] ) : gammaln ( x -- gamma[x] )
#! gammaln(x) is an alternative when gamma(x)'s range #! gammaln(x) is an alternative when gamma(x)'s range
#! varies too widely #! varies too widely
dup 0 < [ dup 0 < [
drop 1./0. drop 1./0.
] [ ] [
dup abs gammaln-lanczos6 swap dup 0 > [ drop ] [ gamma-neg ] if [ abs gammaln-lanczos6 ] keep dup 0 > [ drop ] [ gamma-neg ] if
] if ; ] if ;
: nth-root ( n x -- y ) : nth-root ( n x -- y )
[ recip ] dip swap ^ ; swap recip ^ ;
! Forth Scientific Library Algorithm #1 ! Forth Scientific Library Algorithm #1
! !
@ -116,6 +116,6 @@ PRIVATE>
: stirling-fact ( n -- fact ) : stirling-fact ( n -- fact )
[ pi 2 * * sqrt ] [ pi 2 * * sqrt ]
[ dup e / swap ^ ] [ [ e / ] keep ^ ]
[ 12 * recip 1 + ] [ 12 * recip 1+ ] tri * * ;
tri * * ;

View File

@ -1,7 +1,7 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007, 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: combinators.lib kernel math math.functions math.parser namespaces USING: combinators.short-circuit grouping kernel math math.parser namespaces
sequences splitting grouping combinators.short-circuit ; sequences ;
IN: math.text.english IN: math.text.english
<PRIVATE <PRIVATE
@ -52,13 +52,11 @@ SYMBOL: and-needed?
] if ; ] if ;
: 3digits>text ( n -- str ) : 3digits>text ( n -- str )
dup hundreds-place swap tens-place append ; [ hundreds-place ] [ tens-place ] bi append ;
: text-with-scale ( index seq -- str ) : text-with-scale ( index seq -- str )
dupd nth 3digits>text swap [ nth 3digits>text ] [ drop scale-numbers ] 2bi
scale-numbers [ [ " " swap 3append ] unless-empty ;
" " swap 3append
] unless-empty ;
: append-with-conjunction ( str1 str2 -- newstr ) : append-with-conjunction ( str1 str2 -- newstr )
over length zero? [ over length zero? [
@ -68,20 +66,19 @@ SYMBOL: and-needed?
and-needed? off and-needed? off
] if ; ] if ;
: (recombine) ( str index seq -- newstr seq ) : (recombine) ( str index seq -- newstr )
2dup nth zero? [ 2dup nth zero? [
nip 2drop
] [ ] [
[ text-with-scale ] keep text-with-scale append-with-conjunction
-rot append-with-conjunction swap
] if ; ] if ;
: recombine ( seq -- str ) : recombine ( seq -- str )
dup length 1 = [ dup length 1 = [
first 3digits>text first 3digits>text
] [ ] [
dup set-conjunction "" swap [ set-conjunction "" ] [ length ] [ ] tri
dup length [ swap (recombine) ] each drop [ (recombine) ] curry each
] if ; ] if ;
: (number>text) ( n -- str ) : (number>text) ( n -- str )

View File

@ -0,0 +1,6 @@
USING: project-euler.001 tools.test ;
IN: project-euler.001.tests
[ 233168 ] [ euler001 ] unit-test
[ 233168 ] [ euler001a ] unit-test
[ 233168 ] [ euler001b ] unit-test

View File

@ -0,0 +1,5 @@
USING: project-euler.002 tools.test ;
IN: project-euler.002.tests
[ 4613732 ] [ euler002 ] unit-test
[ 4613732 ] [ euler002a ] unit-test

View File

@ -13,7 +13,8 @@ IN: project-euler.002
! 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... ! 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
! Find the sum of all the even-valued terms in the sequence which do not exceed one million. ! Find the sum of all the even-valued terms in the sequence which do not exceed
! four million.
! SOLUTION ! SOLUTION
@ -30,10 +31,10 @@ PRIVATE>
V{ 0 } clone 1 rot (fib-upto) ; V{ 0 } clone 1 rot (fib-upto) ;
: euler002 ( -- answer ) : euler002 ( -- answer )
1000000 fib-upto [ even? ] filter sum ; 4000000 fib-upto [ even? ] filter sum ;
! [ euler002 ] 100 ave-time ! [ euler002 ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.22 SD (100 trials)
! ALTERNATE SOLUTIONS ! ALTERNATE SOLUTIONS
@ -44,9 +45,9 @@ PRIVATE>
but-last-slice { 0 1 } prepend ; but-last-slice { 0 1 } prepend ;
: euler002a ( -- answer ) : euler002a ( -- answer )
1000000 fib-upto* [ even? ] filter sum ; 4000000 fib-upto* [ even? ] filter sum ;
! [ euler002a ] 100 ave-time ! [ euler002a ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.2 SD (100 trials)
MAIN: euler002a MAIN: euler002a

View File

@ -0,0 +1,4 @@
USING: project-euler.003 tools.test ;
IN: project-euler.003.tests
[ 6857 ] [ euler003 ] unit-test

View File

@ -10,16 +10,16 @@ IN: project-euler.003
! The prime factors of 13195 are 5, 7, 13 and 29. ! The prime factors of 13195 are 5, 7, 13 and 29.
! What is the largest prime factor of the number 317584931803? ! What is the largest prime factor of the number 600851475143 ?
! SOLUTION ! SOLUTION
! -------- ! --------
: euler003 ( -- answer ) : euler003 ( -- answer )
317584931803 factors supremum ; 600851475143 factors supremum ;
! [ euler003 ] 100 ave-time ! [ euler003 ] 100 ave-time
! 1 ms run / 0 ms GC ave time - 100 trials ! 1 ms ave run time - 0.49 SD (100 trials)
MAIN: euler003 MAIN: euler003

View File

@ -0,0 +1,4 @@
USING: project-euler.004 tools.test ;
IN: project-euler.004.tests
[ 906609 ] [ euler004 ] unit-test

View File

@ -32,6 +32,6 @@ PRIVATE>
source-004 dup cartesian-product [ product ] map prune max-palindrome ; source-004 dup cartesian-product [ product ] map prune max-palindrome ;
! [ euler004 ] 100 ave-time ! [ euler004 ] 100 ave-time
! 1608 ms run / 102 ms GC ave time - 100 trials ! 1164 ms ave run time - 39.35 SD (100 trials)
MAIN: euler004 MAIN: euler004

View File

@ -0,0 +1,4 @@
USING: project-euler.005 tools.test ;
IN: project-euler.005.tests
[ 232792560 ] [ euler005 ] unit-test

View File

@ -21,6 +21,6 @@ IN: project-euler.005
20 1 [ 1+ lcm ] reduce ; 20 1 [ 1+ lcm ] reduce ;
! [ euler005 ] 100 ave-time ! [ euler005 ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.14 SD (100 trials)
MAIN: euler005 MAIN: euler005

View File

@ -0,0 +1,4 @@
USING: project-euler.006 tools.test ;
IN: project-euler.006.tests
[ 25164150 ] [ euler006 ] unit-test

View File

@ -1,6 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007, 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math math.functions math.ranges sequences ; USING: kernel math math.ranges sequences ;
IN: project-euler.006 IN: project-euler.006
! http://projecteuler.net/index.php?section=problems&id=6 ! http://projecteuler.net/index.php?section=problems&id=6
@ -35,9 +35,9 @@ IN: project-euler.006
PRIVATE> PRIVATE>
: euler006 ( -- answer ) : euler006 ( -- answer )
1 100 [a,b] dup sum-of-squares swap square-of-sum - abs ; 100 [1,b] [ sum-of-squares ] [ square-of-sum ] bi - abs ;
! [ euler006 ] 100 ave-time ! [ euler006 ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.24 SD (100 trials)
MAIN: euler006 MAIN: euler006

View File

@ -0,0 +1,4 @@
USING: project-euler.007 tools.test ;
IN: project-euler.007.tests
[ 104743 ] [ euler007 ] unit-test

View File

@ -24,6 +24,6 @@ IN: project-euler.007
10001 nth-prime ; 10001 nth-prime ;
! [ euler007 ] 100 ave-time ! [ euler007 ] 100 ave-time
! 10 ms run / 0 ms GC ave time - 100 trials ! 5 ms ave run time - 1.13 SD (100 trials)
MAIN: euler007 MAIN: euler007

View File

@ -0,0 +1,4 @@
USING: project-euler.008 tools.test ;
IN: project-euler.008.tests
[ 40824 ] [ euler008 ] unit-test

View File

@ -1,6 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007, 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: math.parser project-euler.common sequences ; USING: grouping math.parser sequences ;
IN: project-euler.008 IN: project-euler.008
! http://projecteuler.net/index.php?section=problems&id=8 ! http://projecteuler.net/index.php?section=problems&id=8
@ -64,9 +64,9 @@ IN: project-euler.008
PRIVATE> PRIVATE>
: euler008 ( -- answer ) : euler008 ( -- answer )
source-008 5 collect-consecutive [ string>digits product ] map supremum ; source-008 5 clump [ string>digits product ] map supremum ;
! [ euler008 ] 100 ave-time ! [ euler008 ] 100 ave-time
! 11 ms run / 0 ms GC ave time - 100 trials ! 2 ms ave run time - 0.79 SD (100 trials)
MAIN: euler008 MAIN: euler008

View File

@ -0,0 +1,4 @@
USING: project-euler.009 tools.test ;
IN: project-euler.009.tests
[ 31875000 ] [ euler009 ] unit-test

View File

@ -1,6 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007, 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math math.functions namespaces make sequences sorting ; USING: kernel make math sequences sorting ;
IN: project-euler.009 IN: project-euler.009
! http://projecteuler.net/index.php?section=problems&id=9 ! http://projecteuler.net/index.php?section=problems&id=9
@ -30,14 +30,14 @@ IN: project-euler.009
: abc ( p q -- triplet ) : abc ( p q -- triplet )
[ [
2dup * , ! a = p * q 2dup * , ! a = p * q
[ sq ] bi@ 2dup - 2 / , ! b = (p² - q²) / 2 [ sq ] bi@
+ 2 / , ! c = (p² + q²) / 2 [ - 2 / , ] ! b = (p² - q²) / 2
[ + 2 / , ] 2bi ! c = (p² + q²) / 2
] { } make natural-sort ; ] { } make natural-sort ;
: (ptriplet) ( target p q triplet -- target p q ) : (ptriplet) ( target p q triplet -- target p q )
roll [ swap sum = ] keep -roll sum [ pick ] dip = [ next-pq 2dup abc (ptriplet) ] unless ;
[ next-pq 2dup abc (ptriplet) ] unless ;
: ptriplet ( target -- triplet ) : ptriplet ( target -- triplet )
3 1 { 3 4 5 } (ptriplet) abc nip ; 3 1 { 3 4 5 } (ptriplet) abc nip ;
@ -48,6 +48,6 @@ PRIVATE>
1000 ptriplet product ; 1000 ptriplet product ;
! [ euler009 ] 100 ave-time ! [ euler009 ] 100 ave-time
! 1 ms run / 0 ms GC ave time - 100 trials ! 1 ms ave run time - 0.73 SD (100 trials)
MAIN: euler009 MAIN: euler009

View File

@ -0,0 +1,4 @@
USING: project-euler.010 tools.test ;
IN: project-euler.010.tests
[ 142913828922 ] [ euler010 ] unit-test

View File

@ -10,16 +10,19 @@ IN: project-euler.010
! The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. ! The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
! Find the sum of all the primes below one million. ! Find the sum of all the primes below two million.
! SOLUTION ! SOLUTION
! -------- ! --------
: euler010 ( -- answer ) : euler010 ( -- answer )
1000000 primes-upto sum ; 2000000 primes-upto sum ;
! [ euler010 ] 100 ave-time ! [ euler010 ] time
! 14 ms run / 0 ms GC ave time - 100 trials ! 266425 ms run / 10001 ms GC time
! TODO: this takes well over one minute now that they changed the problem to
! two million instead of one. the primes vocab could use some improvements
MAIN: euler010 MAIN: euler010

View File

@ -0,0 +1,4 @@
USING: project-euler.011 tools.test ;
IN: project-euler.011.tests
[ 70600674 ] [ euler011 ] unit-test

View File

@ -1,7 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007, 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel namespaces make project-euler.common sequences USING: grouping kernel make sequences ;
splitting grouping ;
IN: project-euler.011 IN: project-euler.011
! http://projecteuler.net/index.php?section=problems&id=11 ! http://projecteuler.net/index.php?section=problems&id=11
@ -88,7 +87,7 @@ IN: project-euler.011
horizontal pad-front pad-back flip ; horizontal pad-front pad-back flip ;
: max-product ( matrix width -- n ) : max-product ( matrix width -- n )
[ collect-consecutive ] curry map concat [ clump ] curry map concat
[ product ] map supremum ; inline [ product ] map supremum ; inline
PRIVATE> PRIVATE>
@ -100,6 +99,6 @@ PRIVATE>
] { } make supremum ; ] { } make supremum ;
! [ euler011 ] 100 ave-time ! [ euler011 ] 100 ave-time
! 4 ms run / 0 ms GC ave time - 100 trials ! 3 ms ave run time - 0.77 SD (100 trials)
MAIN: euler011 MAIN: euler011

View File

@ -0,0 +1,4 @@
USING: project-euler.012 tools.test ;
IN: project-euler.012.tests
[ 76576500 ] [ euler012 ] unit-test

View File

@ -37,6 +37,6 @@ IN: project-euler.012
8 [ dup nth-triangle tau* 500 < ] [ 1+ ] [ ] while nth-triangle ; 8 [ dup nth-triangle tau* 500 < ] [ 1+ ] [ ] while nth-triangle ;
! [ euler012 ] 10 ave-time ! [ euler012 ] 10 ave-time
! 5413 ms run / 1 ms GC ave time - 10 trials ! 6573 ms ave run time - 346.27 SD (10 trials)
MAIN: euler012 MAIN: euler012

View File

@ -0,0 +1,4 @@
USING: project-euler.013 tools.test ;
IN: project-euler.013.tests
[ 5537376230 ] [ euler013 ] unit-test

View File

@ -228,6 +228,6 @@ PRIVATE>
source-013 sum number>string 10 head string>number ; source-013 sum number>string 10 head string>number ;
! [ euler013 ] 100 ave-time ! [ euler013 ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.31 SD (100 trials)
MAIN: euler013 MAIN: euler013

View File

@ -0,0 +1,5 @@
USING: project-euler.014 tools.test ;
IN: project-euler.014.tests
[ 837799 ] [ euler014 ] unit-test
[ 837799 ] [ euler014a ] unit-test

View File

@ -1,7 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: arrays combinators.short-circuit kernel USING: combinators.short-circuit kernel make math math.ranges sequences ;
math math.ranges namespaces make sequences sorting ;
IN: project-euler.014 IN: project-euler.014
! http://projecteuler.net/index.php?section=problems&id=14 ! http://projecteuler.net/index.php?section=problems&id=14
@ -59,7 +58,7 @@ PRIVATE>
<PRIVATE <PRIVATE
: worth-calculating? ( n -- ? ) : worth-calculating? ( n -- ? )
{ [ dup 1- 3 mod zero? ] [ dup 1- 3 / even? ] } 0&& nip ; 1- 3 { [ mod zero? ] [ / even? ] } 2&& ;
PRIVATE> PRIVATE>

View File

@ -0,0 +1,4 @@
USING: project-euler.015 tools.test ;
IN: project-euler.015.tests
[ 137846528820 ] [ euler015 ] unit-test

View File

@ -28,6 +28,6 @@ PRIVATE>
20 grid-paths ; 20 grid-paths ;
! [ euler015 ] 100 ave-time ! [ euler015 ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.2 SD (100 trials)
MAIN: euler015 MAIN: euler015

View File

@ -0,0 +1,4 @@
USING: project-euler.016 tools.test ;
IN: project-euler.016.tests
[ 1366 ] [ euler016 ] unit-test

View File

@ -1,6 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007, 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: math.functions math.parser project-euler.common sequences ; USING: math.functions project-euler.common sequences ;
IN: project-euler.016 IN: project-euler.016
! http://projecteuler.net/index.php?section=problems&id=16 ! http://projecteuler.net/index.php?section=problems&id=16
@ -20,6 +20,6 @@ IN: project-euler.016
2 1000 ^ number>digits sum ; 2 1000 ^ number>digits sum ;
! [ euler016 ] 100 ave-time ! [ euler016 ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.67 SD (100 trials)
MAIN: euler016 MAIN: euler016

View File

@ -0,0 +1,4 @@
USING: project-euler.017 tools.test ;
IN: project-euler.017.tests
[ 21124 ] [ euler017 ] unit-test

View File

@ -1,7 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007, 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math.ranges math.text.english sequences strings USING: ascii kernel math.ranges math.text.english sequences ;
ascii combinators.short-circuit ;
IN: project-euler.017 IN: project-euler.017
! http://projecteuler.net/index.php?section=problems&id=17 ! http://projecteuler.net/index.php?section=problems&id=17
@ -26,7 +25,7 @@ IN: project-euler.017
: euler017 ( -- answer ) : euler017 ( -- answer )
1000 [1,b] SBUF" " clone [ number>text over push-all ] reduce [ Letter? ] count ; 1000 [1,b] SBUF" " clone [ number>text over push-all ] reduce [ Letter? ] count ;
! [ euler017a ] 100 ave-time ! [ euler017 ] 100 ave-time
! 14 ms run / 0 ms GC ave time - 100 trials ! 15 ms ave run time - 1.71 SD (100 trials)
MAIN: euler017 MAIN: euler017

View File

@ -0,0 +1,5 @@
USING: project-euler.018 tools.test ;
IN: project-euler.018.tests
[ 1074 ] [ euler018 ] unit-test
[ 1074 ] [ euler018a ] unit-test

View File

@ -74,7 +74,7 @@ PRIVATE>
source-018 propagate-all first first ; source-018 propagate-all first first ;
! [ euler018 ] 100 ave-time ! [ euler018 ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.29 SD (100 trials)
! ALTERNATE SOLUTIONS ! ALTERNATE SOLUTIONS
@ -84,6 +84,6 @@ PRIVATE>
source-018 max-path ; source-018 max-path ;
! [ euler018a ] 100 ave-time ! [ euler018a ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.39 SD (100 trials)
MAIN: euler018a MAIN: euler018a

View File

@ -0,0 +1,5 @@
USING: project-euler.019 tools.test ;
IN: project-euler.019.tests
[ 171 ] [ euler019 ] unit-test
[ 171 ] [ euler019a ] unit-test

View File

@ -36,7 +36,7 @@ IN: project-euler.019
] map concat [ zero? ] count ; ] map concat [ zero? ] count ;
! [ euler019 ] 100 ave-time ! [ euler019 ] 100 ave-time
! 1 ms run / 0 ms GC ave time - 100 trials ! 1 ms ave run time - 0.51 SD (100 trials)
! ALTERNATE SOLUTIONS ! ALTERNATE SOLUTIONS
@ -61,6 +61,6 @@ PRIVATE>
end-date start-date first-days [ zero? ] count ; end-date start-date first-days [ zero? ] count ;
! [ euler019a ] 100 ave-time ! [ euler019a ] 100 ave-time
! 131 ms run / 3 ms GC ave time - 100 trials ! 17 ms ave run time - 2.13 SD (100 trials)
MAIN: euler019 MAIN: euler019

View File

@ -0,0 +1,4 @@
USING: project-euler.020 tools.test ;
IN: project-euler.020.tests
[ 648 ] [ euler020 ] unit-test

View File

@ -1,6 +1,6 @@
! Copyright (c) 2007 Aaron Schaefer. ! Copyright (c) 2007, 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: math.combinatorics math.parser project-euler.common sequences ; USING: math.combinatorics project-euler.common sequences ;
IN: project-euler.020 IN: project-euler.020
! http://projecteuler.net/index.php?section=problems&id=20 ! http://projecteuler.net/index.php?section=problems&id=20
@ -20,6 +20,6 @@ IN: project-euler.020
100 factorial number>digits sum ; 100 factorial number>digits sum ;
! [ euler020 ] 100 ave-time ! [ euler020 ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.55 (100 trials)
MAIN: euler020 MAIN: euler020

View File

@ -0,0 +1,4 @@
USING: project-euler.021 tools.test ;
IN: project-euler.021.tests
[ 31626 ] [ euler021 ] unit-test

View File

@ -27,12 +27,12 @@ IN: project-euler.021
: amicable? ( n -- ? ) : amicable? ( n -- ? )
dup sum-proper-divisors dup sum-proper-divisors
{ [ 2dup = not ] [ 2dup sum-proper-divisors = ] } 0&& 2nip ; { [ = not ] [ sum-proper-divisors = ] } 2&& ;
: euler021 ( -- answer ) : euler021 ( -- answer )
10000 [1,b] [ dup amicable? [ drop 0 ] unless ] sigma ; 10000 [1,b] [ dup amicable? [ drop 0 ] unless ] sigma ;
! [ euler021 ] 100 ave-time ! [ euler021 ] 100 ave-time
! 328 ms run / 10 ms GC ave time - 100 trials ! 335 ms ave run time - 18.63 SD (100 trials)
MAIN: euler021 MAIN: euler021

View File

@ -0,0 +1,4 @@
USING: project-euler.022 tools.test ;
IN: project-euler.022.tests
[ 871198282 ] [ euler022 ] unit-test

View File

@ -40,6 +40,6 @@ PRIVATE>
source-022 natural-sort name-scores sum ; source-022 natural-sort name-scores sum ;
! [ euler022 ] 100 ave-time ! [ euler022 ] 100 ave-time
! 123 ms run / 4 ms GC ave time - 100 trials ! 74 ms ave run time - 5.13 SD (100 trials)
MAIN: euler022 MAIN: euler022

View File

@ -0,0 +1,4 @@
USING: project-euler.023 tools.test ;
IN: project-euler.023.tests
[ 4179871 ] [ euler023 ] unit-test

View File

@ -1,7 +1,6 @@
! Copyright (c) 2008 Aaron Schaefer. ! Copyright (c) 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: hashtables kernel math math.ranges project-euler.common sequences USING: kernel math math.ranges project-euler.common sequences sets sorting ;
sorting sets ;
IN: project-euler.023 IN: project-euler.023
! http://projecteuler.net/index.php?section=problems&id=23 ! http://projecteuler.net/index.php?section=problems&id=23

View File

@ -0,0 +1,4 @@
USING: project-euler.024 tools.test ;
IN: project-euler.024.tests
[ 2783915460 ] [ euler024 ] unit-test

View File

@ -26,6 +26,6 @@ IN: project-euler.024
999999 10 permutation 10 digits>integer ; 999999 10 permutation 10 digits>integer ;
! [ euler024 ] 100 ave-time ! [ euler024 ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.27 SD (100 trials)
MAIN: euler024 MAIN: euler024

View File

@ -0,0 +1,5 @@
USING: project-euler.025 tools.test ;
IN: project-euler.025.tests
[ 4782 ] [ euler025 ] unit-test
[ 4782 ] [ euler025a ] unit-test

View File

@ -1,7 +1,7 @@
! Copyright (c) 2008 Aaron Schaefer. ! Copyright (c) 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: alien.syntax kernel math math.constants math.functions math.parser USING: kernel math math.constants math.functions math.parser memoize
math.ranges memoize project-euler.common sequences ; project-euler.common sequences ;
IN: project-euler.025 IN: project-euler.025
! http://projecteuler.net/index.php?section=problems&id=25 ! http://projecteuler.net/index.php?section=problems&id=25
@ -55,7 +55,7 @@ PRIVATE>
1000 digit-fib ; 1000 digit-fib ;
! [ euler025 ] 10 ave-time ! [ euler025 ] 10 ave-time
! 5237 ms run / 72 ms GC ave time - 10 trials ! 5345 ms ave run time - 105.91 SD (10 trials)
! ALTERNATE SOLUTIONS ! ALTERNATE SOLUTIONS
@ -76,6 +76,6 @@ PRIVATE>
1000 digit-fib* ; 1000 digit-fib* ;
! [ euler025a ] 100 ave-time ! [ euler025a ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.17 SD (100 trials)
MAIN: euler025a MAIN: euler025a

View File

@ -0,0 +1,4 @@
USING: project-euler.026 tools.test ;
IN: project-euler.026.tests
[ 983 ] [ euler026 ] unit-test

View File

@ -66,6 +66,6 @@ PRIVATE>
source-026 max-period drop denominator ; source-026 max-period drop denominator ;
! [ euler026 ] 100 ave-time ! [ euler026 ] 100 ave-time
! 724 ms run / 7 ms GC ave time - 100 trials ! 290 ms ave run time - 19.2 SD (100 trials)
MAIN: euler026 MAIN: euler026

View File

@ -0,0 +1,4 @@
USING: project-euler.027 tools.test ;
IN: project-euler.027.tests
[ -59231 ] [ euler027 ] unit-test

View File

@ -68,7 +68,7 @@ PRIVATE>
source-027 max-consecutive drop product ; source-027 max-consecutive drop product ;
! [ euler027 ] 100 ave-time ! [ euler027 ] 100 ave-time
! 687 ms run / 23 ms GC ave time - 100 trials ! 111 ms ave run time - 6.07 SD (100 trials)
! TODO: generalize max-consecutive/max-product (from #26) into a new word ! TODO: generalize max-consecutive/max-product (from #26) into a new word

View File

@ -0,0 +1,4 @@
USING: project-euler.028 tools.test ;
IN: project-euler.028.tests
[ 669171001 ] [ euler028 ] unit-test

View File

@ -30,7 +30,7 @@ IN: project-euler.028
<PRIVATE <PRIVATE
: sum-corners ( n -- sum ) : sum-corners ( n -- sum )
dup 1 = [ [ sq 4 * ] keep 6 * - 6 + ] unless ; dup 1 = [ [ sq 4 * ] [ 6 * ] bi - 6 + ] unless ;
: sum-diags ( n -- sum ) : sum-diags ( n -- sum )
1 swap 2 <range> [ sum-corners ] sigma ; 1 swap 2 <range> [ sum-corners ] sigma ;
@ -41,6 +41,6 @@ PRIVATE>
1001 sum-diags ; 1001 sum-diags ;
! [ euler028 ] 100 ave-time ! [ euler028 ] 100 ave-time
! 0 ms run / 0 ms GC ave time - 100 trials ! 0 ms ave run time - 0.39 SD (100 trials)
MAIN: euler028 MAIN: euler028

View File

@ -0,0 +1,4 @@
USING: project-euler.029 tools.test ;
IN: project-euler.029.tests
[ 9183 ] [ euler029 ] unit-test

View File

@ -32,6 +32,6 @@ IN: project-euler.029
2 100 [a,b] dup cartesian-product [ first2 ^ ] map prune length ; 2 100 [a,b] dup cartesian-product [ first2 ^ ] map prune length ;
! [ euler029 ] 100 ave-time ! [ euler029 ] 100 ave-time
! 951 ms run / 12 ms GC ave time - 100 trials ! 704 ms ave run time - 28.07 SD (100 trials)
MAIN: euler029 MAIN: euler029

View File

@ -0,0 +1,4 @@
USING: project-euler.030 tools.test ;
IN: project-euler.030.tests
[ 443839 ] [ euler030 ] unit-test

View File

@ -41,6 +41,6 @@ PRIVATE>
325537 [ dup sum-fifth-powers = ] filter sum 1- ; 325537 [ dup sum-fifth-powers = ] filter sum 1- ;
! [ euler030 ] 100 ave-time ! [ euler030 ] 100 ave-time
! 2537 ms run / 125 ms GC ave time - 100 trials ! 1700 ms ave run time - 64.84 SD (100 trials)
MAIN: euler030 MAIN: euler030

View File

@ -0,0 +1,4 @@
USING: project-euler.031 tools.test ;
IN: project-euler.031.tests
[ 73682 ] [ euler031 ] unit-test

View File

@ -30,25 +30,25 @@ IN: project-euler.031
drop 1 ; drop 1 ;
: 2p ( m -- n ) : 2p ( m -- n )
dup 0 >= [ [ 2 - 2p ] keep 1p + ] [ drop 0 ] if ; dup 0 >= [ [ 2 - 2p ] [ 1p ] bi + ] [ drop 0 ] if ;
: 5p ( m -- n ) : 5p ( m -- n )
dup 0 >= [ [ 5 - 5p ] keep 2p + ] [ drop 0 ] if ; dup 0 >= [ [ 5 - 5p ] [ 2p ] bi + ] [ drop 0 ] if ;
: 10p ( m -- n ) : 10p ( m -- n )
dup 0 >= [ [ 10 - 10p ] keep 5p + ] [ drop 0 ] if ; dup 0 >= [ [ 10 - 10p ] [ 5p ] bi + ] [ drop 0 ] if ;
: 20p ( m -- n ) : 20p ( m -- n )
dup 0 >= [ [ 20 - 20p ] keep 10p + ] [ drop 0 ] if ; dup 0 >= [ [ 20 - 20p ] [ 10p ] bi + ] [ drop 0 ] if ;
: 50p ( m -- n ) : 50p ( m -- n )
dup 0 >= [ [ 50 - 50p ] keep 20p + ] [ drop 0 ] if ; dup 0 >= [ [ 50 - 50p ] [ 20p ] bi + ] [ drop 0 ] if ;
: 100p ( m -- n ) : 100p ( m -- n )
dup 0 >= [ [ 100 - 100p ] keep 50p + ] [ drop 0 ] if ; dup 0 >= [ [ 100 - 100p ] [ 50p ] bi + ] [ drop 0 ] if ;
: 200p ( m -- n ) : 200p ( m -- n )
dup 0 >= [ [ 200 - 200p ] keep 100p + ] [ drop 0 ] if ; dup 0 >= [ [ 200 - 200p ] [ 100p ] bi + ] [ drop 0 ] if ;
PRIVATE> PRIVATE>
@ -56,7 +56,7 @@ PRIVATE>
200 200p ; 200 200p ;
! [ euler031 ] 100 ave-time ! [ euler031 ] 100 ave-time
! 4 ms run / 0 ms GC ave time - 100 trials ! 3 ms ave run time - 0.91 SD (100 trials)
! TODO: generalize to eliminate duplication; use a sequence to specify denominations? ! TODO: generalize to eliminate duplication; use a sequence to specify denominations?

View File

@ -0,0 +1,5 @@
USING: project-euler.032 tools.test ;
IN: project-euler.032.tests
[ 45228 ] [ euler032 ] unit-test
[ 45228 ] [ euler032a ] unit-test

View File

@ -1,7 +1,7 @@
! Copyright (c) 2008 Aaron Schaefer. ! Copyright (c) 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: hashtables kernel math math.combinatorics math.functions USING: kernel math math.combinatorics math.functions math.parser math.ranges
math.parser math.ranges project-euler.common sequences sets ; project-euler.common sequences sets ;
IN: project-euler.032 IN: project-euler.032
! http://projecteuler.net/index.php?section=problems&id=32 ! http://projecteuler.net/index.php?section=problems&id=32
@ -38,7 +38,7 @@ IN: project-euler.032
[ string>number ] tri@ [ * ] dip = ; [ string>number ] tri@ [ * ] dip = ;
: valid? ( n -- ? ) : valid? ( n -- ? )
dup 1and4 swap 2and3 or ; [ 1and4 ] [ 2and3 ] bi or ;
: products ( seq -- m ) : products ( seq -- m )
[ 10 4 ^ mod ] map ; [ 10 4 ^ mod ] map ;
@ -49,7 +49,7 @@ PRIVATE>
source-032 [ valid? ] filter products prune sum ; source-032 [ valid? ] filter products prune sum ;
! [ euler032 ] 10 ave-time ! [ euler032 ] 10 ave-time
! 23922 ms run / 1505 ms GC ave time - 10 trials ! 16361 ms ave run time - 417.8 SD (10 trials)
! ALTERNATE SOLUTIONS ! ALTERNATE SOLUTIONS
@ -72,7 +72,7 @@ PRIVATE>
: euler032a ( -- answer ) : euler032a ( -- answer )
source-032a [ mmp ] map [ pandigital? ] filter products prune sum ; source-032a [ mmp ] map [ pandigital? ] filter products prune sum ;
! [ euler032a ] 100 ave-time ! [ euler032a ] 10 ave-time
! 5978 ms run / 327 ms GC ave time - 100 trials ! 2624 ms ave run time - 131.91 SD (10 trials)
MAIN: euler032a MAIN: euler032a

View File

@ -0,0 +1,4 @@
USING: project-euler.033 tools.test ;
IN: project-euler.033.tests
[ 100 ] [ euler033 ] unit-test

View File

@ -50,6 +50,6 @@ PRIVATE>
source-033 curious-fractions product denominator ; source-033 curious-fractions product denominator ;
! [ euler033 ] 100 ave-time ! [ euler033 ] 100 ave-time
! 5 ms run / 0 ms GC ave time - 100 trials ! 7 ms ave run time - 1.31 SD (100 trials)
MAIN: euler033 MAIN: euler033

View File

@ -0,0 +1,4 @@
USING: project-euler.034 tools.test ;
IN: project-euler.034.tests
[ 40730 ] [ euler034 ] unit-test

View File

@ -42,6 +42,6 @@ PRIVATE>
3 2000000 [a,b] [ factorion? ] filter sum ; 3 2000000 [a,b] [ factorion? ] filter sum ;
! [ euler034 ] 10 ave-time ! [ euler034 ] 10 ave-time
! 15089 ms run / 725 ms GC ave time - 10 trials ! 5506 ms ave run time - 144.0 SD (10 trials)
MAIN: euler034 MAIN: euler034

View File

@ -0,0 +1,4 @@
USING: project-euler.035 tools.test ;
IN: project-euler.035.tests
[ 55 ] [ euler035 ] unit-test

View File

@ -53,7 +53,7 @@ PRIVATE>
source-035 [ possible? ] filter [ circular? ] count ; source-035 [ possible? ] filter [ circular? ] count ;
! [ euler035 ] 100 ave-time ! [ euler035 ] 100 ave-time
! 904 ms run / 86 ms GC ave time - 100 trials ! 538 ms ave run time - 17.16 SD (100 trials)
! TODO: try using bit arrays or other methods outlined here: ! TODO: try using bit arrays or other methods outlined here:
! http://home.comcast.net/~babdulbaki/Circular_Primes.html ! http://home.comcast.net/~babdulbaki/Circular_Primes.html

View File

@ -0,0 +1,4 @@
USING: project-euler.036 tools.test ;
IN: project-euler.036.tests
[ 872187 ] [ euler036 ] unit-test

View File

@ -26,8 +26,7 @@ IN: project-euler.036
<PRIVATE <PRIVATE
: both-bases? ( n -- ? ) : both-bases? ( n -- ? )
{ [ dup palindrome? ] { [ palindrome? ] [ >bin dup reverse = ] } 1&& ;
[ dup >bin dup reverse = ] } 0&& nip ;
PRIVATE> PRIVATE>
@ -35,6 +34,6 @@ PRIVATE>
1 1000000 2 <range> [ both-bases? ] filter sum ; 1 1000000 2 <range> [ both-bases? ] filter sum ;
! [ euler036 ] 100 ave-time ! [ euler036 ] 100 ave-time
! 3891 ms run / 173 ms GC ave time - 100 trials ! 1703 ms ave run time - 96.6 SD (100 trials)
MAIN: euler036 MAIN: euler036

View File

@ -0,0 +1,4 @@
USING: project-euler.037 tools.test ;
IN: project-euler.037.tests
[ 748317 ] [ euler037 ] unit-test

View File

@ -47,6 +47,6 @@ PRIVATE>
23 1000000 primes-between [ r-trunc? ] filter [ l-trunc? ] filter sum ; 23 1000000 primes-between [ r-trunc? ] filter [ l-trunc? ] filter sum ;
! [ euler037 ] 100 ave-time ! [ euler037 ] 100 ave-time
! 768 ms run / 9 ms GC ave time - 100 trials ! 130 ms ave run time - 6.27 SD (100 trials)
MAIN: euler037 MAIN: euler037

View File

@ -0,0 +1,4 @@
USING: project-euler.038 tools.test ;
IN: project-euler.038.tests
[ 932718654 ] [ euler038 ] unit-test

View File

@ -1,6 +1,7 @@
! Copyright (c) 2008 Aaron Schaefer. ! Copyright (c) 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math math.parser math.ranges project-euler.common sequences ; USING: kernel math math.parser math.ranges project-euler.common sequences
strings ;
IN: project-euler.038 IN: project-euler.038
! http://projecteuler.net/index.php?section=problems&id=38 ! http://projecteuler.net/index.php?section=problems&id=38
@ -50,6 +51,6 @@ PRIVATE>
9123 9876 [a,b] [ concat-product ] map [ pandigital? ] filter supremum ; 9123 9876 [a,b] [ concat-product ] map [ pandigital? ] filter supremum ;
! [ euler038 ] 100 ave-time ! [ euler038 ] 100 ave-time
! 37 ms run / 1 ms GC ave time - 100 trials ! 11 ms ave run time - 1.5 SD (100 trials)
MAIN: euler038 MAIN: euler038

View File

@ -0,0 +1,4 @@
USING: project-euler.039 tools.test ;
IN: project-euler.039.tests
[ 840 ] [ euler039 ] unit-test

View File

@ -60,6 +60,6 @@ PRIVATE>
] with-scope ; ] with-scope ;
! [ euler039 ] 100 ave-time ! [ euler039 ] 100 ave-time
! 2 ms run / 0 ms GC ave time - 100 trials ! 1 ms ave run time - 0.37 SD (100 trials)
MAIN: euler039 MAIN: euler039

View File

@ -0,0 +1,4 @@
USING: project-euler.040 tools.test ;
IN: project-euler.040.tests
[ 210 ] [ euler040 ] unit-test

View File

@ -46,6 +46,6 @@ PRIVATE>
[ swap nth-integer ] with map product ; [ swap nth-integer ] with map product ;
! [ euler040 ] 100 ave-time ! [ euler040 ] 100 ave-time
! 1002 ms run / 43 ms GC ave time - 100 trials ! 444 ms ave run time - 23.64 SD (100 trials)
MAIN: euler040 MAIN: euler040

View File

@ -0,0 +1,4 @@
USING: project-euler.041 tools.test ;
IN: project-euler.041.tests
[ 7652413 ] [ euler041 ] unit-test

View File

@ -35,6 +35,6 @@ IN: project-euler.041
[ 10 digits>integer ] map [ prime? ] find nip ; [ 10 digits>integer ] map [ prime? ] find nip ;
! [ euler041 ] 100 ave-time ! [ euler041 ] 100 ave-time
! 107 ms run / 7 ms GC ave time - 100 trials ! 64 ms ave run time - 4.22 SD (100 trials)
MAIN: euler041 MAIN: euler041

View File

@ -0,0 +1,5 @@
USING: project-euler.042 tools.test ;
IN: project-euler.042.tests
[ 162 ] [ euler042 ] unit-test
[ 162 ] [ euler042a ] unit-test

View File

@ -1,7 +1,7 @@
! Copyright (c) 2008 Aaron Schaefer. ! Copyright (c) 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: ascii io.files kernel math math.functions namespaces make USING: ascii io.encodings.ascii io.files kernel make math math.functions
project-euler.common sequences splitting io.encodings.ascii ; namespaces project-euler.common sequences splitting ;
IN: project-euler.042 IN: project-euler.042
! http://projecteuler.net/index.php?section=problems&id=42 ! http://projecteuler.net/index.php?section=problems&id=42
@ -50,7 +50,7 @@ PRIVATE>
triangle-upto [ member? ] curry count ; triangle-upto [ member? ] curry count ;
! [ euler042 ] 100 ave-time ! [ euler042 ] 100 ave-time
! 27 ms run / 1 ms GC ave time - 100 trials ! 19 ms ave run time - 1.97 SD (100 trials)
! ALTERNATE SOLUTIONS ! ALTERNATE SOLUTIONS
@ -69,6 +69,6 @@ PRIVATE>
source-042 [ alpha-value ] map [ triangle? ] count ; source-042 [ alpha-value ] map [ triangle? ] count ;
! [ euler042a ] 100 ave-time ! [ euler042a ] 100 ave-time
! 25 ms run / 1 ms GC ave time - 100 trials ! 21 ms ave run time - 2.2 SD (100 trials)
MAIN: euler042a MAIN: euler042a

View File

@ -0,0 +1,5 @@
USING: project-euler.043 tools.test ;
IN: project-euler.043.tests
[ 16695334890 ] [ euler043 ] unit-test
[ 16695334890 ] [ euler043a ] unit-test

View File

@ -1,8 +1,7 @@
! Copyright (c) 2008 Aaron Schaefer. ! Copyright (c) 2008 Aaron Schaefer.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: combinators.short-circuit hashtables kernel math USING: combinators.short-circuit kernel math math.combinatorics math.parser
math.combinatorics math.parser math.ranges project-euler.common sequences math.ranges project-euler.common sequences sets sorting ;
sorting sets ;
IN: project-euler.043 IN: project-euler.043
! http://projecteuler.net/index.php?section=problems&id=43 ! http://projecteuler.net/index.php?section=problems&id=43
@ -41,14 +40,14 @@ IN: project-euler.043
: interesting? ( seq -- ? ) : interesting? ( seq -- ? )
{ {
[ 17 8 pick subseq-divisible? ] [ 17 8 rot subseq-divisible? ]
[ 13 7 pick subseq-divisible? ] [ 13 7 rot subseq-divisible? ]
[ 11 6 pick subseq-divisible? ] [ 11 6 rot subseq-divisible? ]
[ 7 5 pick subseq-divisible? ] [ 7 5 rot subseq-divisible? ]
[ 5 4 pick subseq-divisible? ] [ 5 4 rot subseq-divisible? ]
[ 3 3 pick subseq-divisible? ] [ 3 3 rot subseq-divisible? ]
[ 2 2 pick subseq-divisible? ] [ 2 2 rot subseq-divisible? ]
} 0&& nip ; } 1&& ;
PRIVATE> PRIVATE>
@ -57,7 +56,7 @@ PRIVATE>
[ interesting? ] filter [ 10 digits>integer ] map sum ; [ interesting? ] filter [ 10 digits>integer ] map sum ;
! [ euler043 ] time ! [ euler043 ] time
! 125196 ms run / 19548 ms GC time ! 104526 ms run / 42735 ms GC time
! ALTERNATE SOLUTIONS ! ALTERNATE SOLUTIONS
@ -74,13 +73,13 @@ PRIVATE>
1000 over <range> [ number>digits 3 0 pad-left ] map [ all-unique? ] filter ; 1000 over <range> [ number>digits 3 0 pad-left ] map [ all-unique? ] filter ;
: overlap? ( seq -- ? ) : overlap? ( seq -- ? )
dup first 2 tail* swap second 2 head = ; [ first 2 tail* ] [ second 2 head ] bi = ;
: clean ( seq -- seq ) : clean ( seq -- seq )
[ unclip 1 head prefix concat ] map [ all-unique? ] filter ; [ unclip 1 head prefix concat ] map [ all-unique? ] filter ;
: add-missing-digit ( seq -- seq ) : add-missing-digit ( seq -- seq )
dup natural-sort 10 swap diff first prefix ; dup natural-sort 10 swap diff prepend ;
: interesting-pandigitals ( -- seq ) : interesting-pandigitals ( -- seq )
17 candidates { 13 11 7 5 3 2 } [ 17 candidates { 13 11 7 5 3 2 } [
@ -93,6 +92,6 @@ PRIVATE>
interesting-pandigitals [ 10 digits>integer ] sigma ; interesting-pandigitals [ 10 digits>integer ] sigma ;
! [ euler043a ] 100 ave-time ! [ euler043a ] 100 ave-time
! 19 ms run / 1 ms GC ave time - 100 trials ! 10 ms ave run time - 1.37 SD (100 trials)
MAIN: euler043a MAIN: euler043a

View File

@ -0,0 +1,4 @@
USING: project-euler.044 tools.test ;
IN: project-euler.044.tests
[ 5482660 ] [ euler044 ] unit-test

View File

@ -31,7 +31,7 @@ IN: project-euler.044
dup 3 * 1- * 2 / ; dup 3 * 1- * 2 / ;
: sum-and-diff? ( m n -- ? ) : sum-and-diff? ( m n -- ? )
2dup + -rot - [ pentagonal? ] bi@ and ; [ + ] [ - ] 2bi [ pentagonal? ] bi@ and ;
PRIVATE> PRIVATE>
@ -40,7 +40,7 @@ PRIVATE>
[ first2 sum-and-diff? ] filter [ first2 - abs ] map infimum ; [ first2 sum-and-diff? ] filter [ first2 - abs ] map infimum ;
! [ euler044 ] 10 ave-time ! [ euler044 ] 10 ave-time
! 8924 ms run / 2872 ms GC ave time - 10 trials ! 4996 ms ave run time - 87.46 SD (10 trials)
! TODO: this solution is ugly and not very efficient...find a better algorithm ! TODO: this solution is ugly and not very efficient...find a better algorithm

View File

@ -0,0 +1,4 @@
USING: project-euler.045 tools.test ;
IN: project-euler.045.tests
[ 1533776805 ] [ euler045 ] unit-test

View File

@ -44,6 +44,6 @@ PRIVATE>
143 next-solution ; 143 next-solution ;
! [ euler045 ] 100 ave-time ! [ euler045 ] 100 ave-time
! 18 ms run / 1 ms GC ave time - 100 trials ! 12 ms ave run time - 1.71 SD (100 trials)
MAIN: euler045 MAIN: euler045

View File

@ -0,0 +1,4 @@
USING: project-euler.046 tools.test ;
IN: project-euler.046.tests
[ 5777 ] [ euler046 ] unit-test

View File

@ -47,6 +47,6 @@ PRIVATE>
9 disprove-conjecture ; 9 disprove-conjecture ;
! [ euler046 ] 100 ave-time ! [ euler046 ] 100 ave-time
! 150 ms run / 2 ms GC ave time - 100 trials ! 37 ms ave run time - 3.39 SD (100 trials)
MAIN: euler046 MAIN: euler046

View File

@ -0,0 +1,5 @@
USING: project-euler.047 tools.test ;
IN: project-euler.047.tests
[ 134043 ] [ euler047 ] unit-test
[ 134043 ] [ euler047a ] unit-test

View File

@ -49,7 +49,7 @@ PRIVATE>
4 646 consecutive ; 4 646 consecutive ;
! [ euler047 ] time ! [ euler047 ] time
! 542708 ms run / 60548 ms GC time ! 344688 ms run / 20727 ms GC time
! ALTERNATE SOLUTIONS ! ALTERNATE SOLUTIONS
@ -88,7 +88,7 @@ PRIVATE>
4 200000 consecutive-under ; 4 200000 consecutive-under ;
! [ euler047a ] 100 ave-time ! [ euler047a ] 100 ave-time
! 503 ms run / 5 ms GC ave time - 100 trials ! 331 ms ave run time - 19.14 SD (100 trials)
! TODO: I don't like that you have to specify the upper bound, maybe try making ! TODO: I don't like that you have to specify the upper bound, maybe try making
! this lazy so it could also short-circuit when it finds the answer? ! this lazy so it could also short-circuit when it finds the answer?

View File

@ -0,0 +1,4 @@
USING: project-euler.048 tools.test ;
IN: project-euler.048.tests
[ 9110846700 ] [ euler048 ] unit-test

View File

@ -0,0 +1,4 @@
USING: project-euler.052 tools.test ;
IN: project-euler.052.tests
[ 142857 ] [ euler052 ] unit-test

View File

@ -30,7 +30,7 @@ IN: project-euler.052
[ number>digits natural-sort ] map all-equal? ; [ number>digits natural-sort ] map all-equal? ;
: candidate? ( n -- ? ) : candidate? ( n -- ? )
{ [ dup odd? ] [ dup 3 mod zero? ] } 0&& nip ; { [ odd? ] [ 3 mod zero? ] } 1&& ;
: next-all-same ( x n -- n ) : next-all-same ( x n -- n )
dup candidate? [ dup candidate? [
@ -46,6 +46,6 @@ PRIVATE>
6 123456 next-all-same ; 6 123456 next-all-same ;
! [ euler052 ] 100 ave-time ! [ euler052 ] 100 ave-time
! 403 ms run / 7 ms GC ave time - 100 trials ! 92 ms ave run time - 6.29 SD (100 trials)
MAIN: euler052 MAIN: euler052

View File

@ -0,0 +1,4 @@
USING: project-euler.053 tools.test ;
IN: project-euler.053.tests
[ 4075 ] [ euler053 ] unit-test

View File

@ -30,6 +30,6 @@ IN: project-euler.053
23 100 [a,b] [ dup [ nCk 1000000 > ] with count ] sigma ; 23 100 [a,b] [ dup [ nCk 1000000 > ] with count ] sigma ;
! [ euler053 ] 100 ave-time ! [ euler053 ] 100 ave-time
! 64 ms run / 2 ms GC ave time - 100 trials ! 52 ms ave run time - 4.44 SD (100 trials)
MAIN: euler053 MAIN: euler053

Some files were not shown because too many files have changed in this diff Show More