diff --git a/extra/project-euler/common/common-tests.factor b/extra/project-euler/common/common-tests.factor new file mode 100644 index 0000000000..1f7a3668e2 --- /dev/null +++ b/extra/project-euler/common/common-tests.factor @@ -0,0 +1,17 @@ +! Copyright (C) 2009 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: tools.test project-euler.common ; +IN: project-euler.common.tests + +[ 4 ] [ -1000 number-length ] unit-test +[ 3 ] [ -999 number-length ] unit-test +[ 3 ] [ -100 number-length ] unit-test +[ 2 ] [ -99 number-length ] unit-test +[ 1 ] [ -9 number-length ] unit-test +[ 1 ] [ -1 number-length ] unit-test +[ 1 ] [ 0 number-length ] unit-test +[ 1 ] [ 9 number-length ] unit-test +[ 2 ] [ 99 number-length ] unit-test +[ 3 ] [ 100 number-length ] unit-test +[ 3 ] [ 999 number-length ] unit-test +[ 4 ] [ 1000 number-length ] unit-test diff --git a/extra/project-euler/common/common.factor b/extra/project-euler/common/common.factor index efec77355b..3d320fad62 100644 --- a/extra/project-euler/common/common.factor +++ b/extra/project-euler/common/common.factor @@ -76,7 +76,12 @@ PRIVATE> [ dup 0 = not ] [ 10 /mod ] produce reverse nip ; : number-length ( n -- m ) - log10 floor 1 + >integer ; + abs [ + 1 + ] [ + 1 0 [ 2over >= ] + [ [ 10 * ] [ 1 + ] bi* ] while 2nip + ] if-zero ; : nth-prime ( n -- n ) 1 - lprimes lnth ;