faster number-length and some unit tests

db4
Doug Coleman 2009-09-14 13:47:37 -05:00
parent c1bc5f22e4
commit 79505168cf
2 changed files with 23 additions and 1 deletions

View File

@ -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

View File

@ -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 ;