project-euler.common: add a digits>number.

db4
John Benediktsson 2015-07-19 18:05:29 -07:00
parent 1b228c7e9c
commit f59d8ef0c1
9 changed files with 19 additions and 16 deletions

View File

@ -1,6 +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: kernel math.combinatorics math.parser project-euler.common USING: kernel math.combinatorics project-euler.common
sequences ; sequences ;
IN: project-euler.024 IN: project-euler.024
@ -24,7 +24,7 @@ IN: project-euler.024
! -------- ! --------
: euler024 ( -- answer ) : euler024 ( -- answer )
999999 10 iota permutation 10 digits>integer ; 999999 10 iota permutation digits>number ;
! [ euler024 ] 100 ave-time ! [ euler024 ] 100 ave-time
! 0 ms ave run time - 0.27 SD (100 trials) ! 0 ms ave run time - 0.27 SD (100 trials)

View File

@ -28,7 +28,7 @@ IN: project-euler.032
: source-032 ( -- seq ) : source-032 ( -- seq )
9 factorial iota [ 9 factorial iota [
9 iota permutation [ 1 + ] map 10 digits>integer 9 iota permutation [ 1 + ] map digits>number
] map ; ] map ;
: 1and4 ( n -- ? ) : 1and4 ( n -- ? )

View File

@ -38,7 +38,7 @@ IN: project-euler.035
: (circular?) ( seq n -- ? ) : (circular?) ( seq n -- ? )
dup 0 > [ dup 0 > [
2dup rotate 10 digits>integer 2dup rotate digits>number
prime? [ 1 - (circular?) ] [ 2drop f ] if prime? [ 1 - (circular?) ] [ 2drop f ] if
] [ ] [
2drop t 2drop t

View File

@ -1,6 +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: kernel math math.parser math.ranges project-euler.common sequences USING: kernel math math.ranges project-euler.common sequences
strings ; strings ;
IN: project-euler.038 IN: project-euler.038
@ -37,7 +37,7 @@ IN: project-euler.038
: (concat-product) ( accum n multiplier -- m ) : (concat-product) ( accum n multiplier -- m )
pick length 8 > [ pick length 8 > [
2drop 10 digits>integer 2drop digits>number
] [ ] [
[ * number>digits append! ] 2keep 1 + (concat-product) [ * number>digits append! ] 2keep 1 + (concat-product)
] if ; ] if ;

View File

@ -32,7 +32,7 @@ IN: project-euler.041
: euler041 ( -- answer ) : euler041 ( -- answer )
{ 7 6 5 4 3 2 1 } all-permutations { 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 ! [ euler041 ] 100 ave-time
! 64 ms ave run time - 4.22 SD (100 trials) ! 64 ms ave run time - 4.22 SD (100 trials)

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: combinators.short-circuit kernel math math.functions math.combinatorics 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 IN: project-euler.043
! http://projecteuler.net/index.php?section=problems&id=43 ! http://projecteuler.net/index.php?section=problems&id=43
@ -36,7 +36,7 @@ IN: project-euler.043
<PRIVATE <PRIVATE
: subseq-divisible? ( n index seq -- ? ) : subseq-divisible? ( n index seq -- ? )
[ 1 - dup 3 + ] dip subseq 10 digits>integer swap divisor? ; [ 1 - dup 3 + ] dip subseq digits>number swap divisor? ;
: interesting? ( seq -- ? ) : interesting? ( seq -- ? )
{ {
@ -54,7 +54,7 @@ PRIVATE>
: euler043 ( -- answer ) : euler043 ( -- answer )
1234567890 number>digits 0 [ 1234567890 number>digits 0 [
dup interesting? [ dup interesting? [
10 digits>integer + digits>number +
] [ drop ] if ] [ drop ] if
] reduce-permutations ; ] reduce-permutations ;
@ -93,7 +93,7 @@ PRIVATE>
PRIVATE> PRIVATE>
: euler043a ( -- answer ) : euler043a ( -- answer )
interesting-pandigitals [ 10 digits>integer ] map-sum ; interesting-pandigitals [ digits>number ] map-sum ;
! [ euler043a ] 100 ave-time ! [ euler043a ] 100 ave-time
! 10 ms ave run time - 1.37 SD (100 trials) ! 10 ms ave run time - 1.37 SD (100 trials)

View File

@ -1,6 +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: kernel math math.parser math.ranges project-euler.common sequences ; USING: kernel math math.ranges project-euler.common sequences ;
IN: project-euler.055 IN: project-euler.055
! http://projecteuler.net/index.php?section=problems&id=55 ! http://projecteuler.net/index.php?section=problems&id=55
@ -45,7 +45,7 @@ IN: project-euler.055
<PRIVATE <PRIVATE
: add-reverse ( n -- m ) : add-reverse ( n -- m )
dup number>digits reverse 10 digits>integer + ; dup number>digits reverse digits>number + ;
: (lychrel?) ( n iteration -- ? ) : (lychrel?) ( n iteration -- ? )
dup 50 < [ dup 50 < [

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: assocs io.encodings.ascii io.files kernel make math math.parser USING: assocs io.encodings.ascii io.files kernel make math
sequences sets project-euler.common ; math.parser sequences sets project-euler.common ;
IN: project-euler.079 IN: project-euler.079
! http://projecteuler.net/index.php?section=problems&id=79 ! http://projecteuler.net/index.php?section=problems&id=79
@ -55,7 +55,7 @@ PRIVATE>
combine over diff append ; combine over diff append ;
: euler079 ( -- answer ) : euler079 ( -- answer )
source-079 >edges topological-sort 10 digits>integer ; source-079 >edges topological-sort digits>number ;
! [ euler079 ] 100 ave-time ! [ euler079 ] 100 ave-time
! 1 ms ave run time - 0.46 SD (100 trials) ! 1 ms ave run time - 0.46 SD (100 trials)

View File

@ -82,6 +82,9 @@ PRIVATE>
: number>digits ( n -- seq ) : number>digits ( n -- seq )
[ dup 0 = not ] [ 10 /mod ] produce reverse! nip ; [ dup 0 = not ] [ 10 /mod ] produce reverse! nip ;
: digits>number ( seq -- n )
0 [ [ 10 * ] [ + ] bi* ] reduce ;
: number-length ( n -- m ) : number-length ( n -- m )
abs [ abs [
1 1