project-euler.common: add a digits>number.
							parent
							
								
									1b228c7e9c
								
							
						
					
					
						commit
						f59d8ef0c1
					
				| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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 -- ? )
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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 ;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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 < [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue