From f59d8ef0c16b0755144861fdd337525a2adc78cc Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sun, 19 Jul 2015 18:05:29 -0700 Subject: [PATCH] project-euler.common: add a digits>number. --- extra/project-euler/024/024.factor | 4 ++-- extra/project-euler/032/032.factor | 2 +- extra/project-euler/035/035.factor | 2 +- extra/project-euler/038/038.factor | 4 ++-- extra/project-euler/041/041.factor | 2 +- extra/project-euler/043/043.factor | 8 ++++---- extra/project-euler/055/055.factor | 4 ++-- extra/project-euler/079/079.factor | 6 +++--- extra/project-euler/common/common.factor | 3 +++ 9 files changed, 19 insertions(+), 16 deletions(-) diff --git a/extra/project-euler/024/024.factor b/extra/project-euler/024/024.factor index 71e44ccb1e..d95dc741eb 100644 --- a/extra/project-euler/024/024.factor +++ b/extra/project-euler/024/024.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math.combinatorics math.parser project-euler.common +USING: kernel math.combinatorics project-euler.common sequences ; IN: project-euler.024 @@ -24,7 +24,7 @@ IN: project-euler.024 ! -------- : euler024 ( -- answer ) - 999999 10 iota permutation 10 digits>integer ; + 999999 10 iota permutation digits>number ; ! [ euler024 ] 100 ave-time ! 0 ms ave run time - 0.27 SD (100 trials) diff --git a/extra/project-euler/032/032.factor b/extra/project-euler/032/032.factor index de0cb72609..00de5e1a85 100644 --- a/extra/project-euler/032/032.factor +++ b/extra/project-euler/032/032.factor @@ -28,7 +28,7 @@ IN: project-euler.032 : source-032 ( -- seq ) 9 factorial iota [ - 9 iota permutation [ 1 + ] map 10 digits>integer + 9 iota permutation [ 1 + ] map digits>number ] map ; : 1and4 ( n -- ? ) diff --git a/extra/project-euler/035/035.factor b/extra/project-euler/035/035.factor index ee4af81720..2b50634f1d 100644 --- a/extra/project-euler/035/035.factor +++ b/extra/project-euler/035/035.factor @@ -38,7 +38,7 @@ IN: project-euler.035 : (circular?) ( seq n -- ? ) dup 0 > [ - 2dup rotate 10 digits>integer + 2dup rotate digits>number prime? [ 1 - (circular?) ] [ 2drop f ] if ] [ 2drop t diff --git a/extra/project-euler/038/038.factor b/extra/project-euler/038/038.factor index 34b4cd91fa..92dbc51e1a 100644 --- a/extra/project-euler/038/038.factor +++ b/extra/project-euler/038/038.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math math.parser math.ranges project-euler.common sequences +USING: kernel math math.ranges project-euler.common sequences strings ; IN: project-euler.038 @@ -37,7 +37,7 @@ IN: project-euler.038 : (concat-product) ( accum n multiplier -- m ) pick length 8 > [ - 2drop 10 digits>integer + 2drop digits>number ] [ [ * number>digits append! ] 2keep 1 + (concat-product) ] if ; diff --git a/extra/project-euler/041/041.factor b/extra/project-euler/041/041.factor index 751ddd3450..5bf7075208 100644 --- a/extra/project-euler/041/041.factor +++ b/extra/project-euler/041/041.factor @@ -32,7 +32,7 @@ IN: project-euler.041 : euler041 ( -- answer ) { 7 6 5 4 3 2 1 } all-permutations - [ 10 digits>integer ] map [ prime? ] find nip ; + [ digits>number ] map [ prime? ] find nip ; ! [ euler041 ] 100 ave-time ! 64 ms ave run time - 4.22 SD (100 trials) diff --git a/extra/project-euler/043/043.factor b/extra/project-euler/043/043.factor index ab59843e21..985c53f745 100644 --- a/extra/project-euler/043/043.factor +++ b/extra/project-euler/043/043.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: combinators.short-circuit kernel math math.functions math.combinatorics - math.parser math.ranges project-euler.common sequences sets sorting ; + math.ranges project-euler.common sequences sets sorting ; IN: project-euler.043 ! http://projecteuler.net/index.php?section=problems&id=43 @@ -36,7 +36,7 @@ IN: project-euler.043 integer swap divisor? ; + [ 1 - dup 3 + ] dip subseq digits>number swap divisor? ; : interesting? ( seq -- ? ) { @@ -54,7 +54,7 @@ PRIVATE> : euler043 ( -- answer ) 1234567890 number>digits 0 [ dup interesting? [ - 10 digits>integer + + digits>number + ] [ drop ] if ] reduce-permutations ; @@ -93,7 +93,7 @@ PRIVATE> PRIVATE> : euler043a ( -- answer ) - interesting-pandigitals [ 10 digits>integer ] map-sum ; + interesting-pandigitals [ digits>number ] map-sum ; ! [ euler043a ] 100 ave-time ! 10 ms ave run time - 1.37 SD (100 trials) diff --git a/extra/project-euler/055/055.factor b/extra/project-euler/055/055.factor index 1d8967ff6c..586d76b957 100644 --- a/extra/project-euler/055/055.factor +++ b/extra/project-euler/055/055.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math math.parser math.ranges project-euler.common sequences ; +USING: kernel math math.ranges project-euler.common sequences ; IN: project-euler.055 ! http://projecteuler.net/index.php?section=problems&id=55 @@ -45,7 +45,7 @@ IN: project-euler.055 digits reverse 10 digits>integer + ; + dup number>digits reverse digits>number + ; : (lychrel?) ( n iteration -- ? ) dup 50 < [ diff --git a/extra/project-euler/079/079.factor b/extra/project-euler/079/079.factor index 8e575daea9..4fb0effffe 100644 --- a/extra/project-euler/079/079.factor +++ b/extra/project-euler/079/079.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: assocs io.encodings.ascii io.files kernel make math math.parser - sequences sets project-euler.common ; +USING: assocs io.encodings.ascii io.files kernel make math + math.parser sequences sets project-euler.common ; IN: project-euler.079 ! http://projecteuler.net/index.php?section=problems&id=79 @@ -55,7 +55,7 @@ PRIVATE> combine over diff append ; : euler079 ( -- answer ) - source-079 >edges topological-sort 10 digits>integer ; + source-079 >edges topological-sort digits>number ; ! [ euler079 ] 100 ave-time ! 1 ms ave run time - 0.46 SD (100 trials) diff --git a/extra/project-euler/common/common.factor b/extra/project-euler/common/common.factor index ac5835fae5..8978ae036b 100644 --- a/extra/project-euler/common/common.factor +++ b/extra/project-euler/common/common.factor @@ -82,6 +82,9 @@ PRIVATE> : number>digits ( n -- seq ) [ dup 0 = not ] [ 10 /mod ] produce reverse! nip ; +: digits>number ( seq -- n ) + 0 [ [ 10 * ] [ + ] bi* ] reduce ; + : number-length ( n -- m ) abs [ 1