Clean up Projece Euler solutions
							parent
							
								
									852c16a79b
								
							
						
					
					
						commit
						92e2ee3509
					
				| 
						 | 
					@ -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: ascii io.files kernel math math.functions namespaces make
 | 
					USING: ascii io.encodings.ascii io.files kernel make math math.functions
 | 
				
			||||||
    project-euler.common sequences splitting io.encodings.ascii ;
 | 
					    namespaces project-euler.common sequences splitting ;
 | 
				
			||||||
IN: project-euler.042
 | 
					IN: project-euler.042
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! http://projecteuler.net/index.php?section=problems&id=42
 | 
					! http://projecteuler.net/index.php?section=problems&id=42
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +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 hashtables kernel math
 | 
					USING: combinators.short-circuit kernel math math.combinatorics math.parser
 | 
				
			||||||
    math.combinatorics math.parser math.ranges project-euler.common sequences
 | 
					    math.ranges project-euler.common sequences sets sorting ;
 | 
				
			||||||
    sorting sets ;
 | 
					 | 
				
			||||||
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
 | 
				
			||||||
| 
						 | 
					@ -74,13 +73,13 @@ PRIVATE>
 | 
				
			||||||
    1000 over <range> [ number>digits 3 0 pad-left ] map [ all-unique? ] filter ;
 | 
					    1000 over <range> [ number>digits 3 0 pad-left ] map [ all-unique? ] filter ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: overlap? ( seq -- ? )
 | 
					: overlap? ( seq -- ? )
 | 
				
			||||||
    dup first 2 tail* swap second 2 head = ;
 | 
					    [ first 2 tail* ] [ second 2 head ] bi = ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: clean ( seq -- seq )
 | 
					: clean ( seq -- seq )
 | 
				
			||||||
    [ unclip 1 head prefix concat ] map [ all-unique? ] filter ;
 | 
					    [ unclip 1 head prefix concat ] map [ all-unique? ] filter ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: add-missing-digit ( seq -- seq )
 | 
					: add-missing-digit ( seq -- seq )
 | 
				
			||||||
    dup natural-sort 10 swap diff first prefix ;
 | 
					    dup natural-sort 10 swap diff prepend ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: interesting-pandigitals ( -- seq )
 | 
					: interesting-pandigitals ( -- seq )
 | 
				
			||||||
    17 candidates { 13 11 7 5 3 2 } [
 | 
					    17 candidates { 13 11 7 5 3 2 } [
 | 
				
			||||||
| 
						 | 
					@ -93,6 +92,6 @@ PRIVATE>
 | 
				
			||||||
    interesting-pandigitals [ 10 digits>integer ] sigma ;
 | 
					    interesting-pandigitals [ 10 digits>integer ] sigma ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! [ euler043a ] 100 ave-time
 | 
					! [ euler043a ] 100 ave-time
 | 
				
			||||||
! 19 ms run / 1 ms GC ave time - 100 trials
 | 
					! 12 ms ave run time - 2.32 SD (100 trials)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MAIN: euler043a
 | 
					MAIN: euler043a
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ IN: project-euler.044
 | 
				
			||||||
    dup 3 * 1- * 2 / ;
 | 
					    dup 3 * 1- * 2 / ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: sum-and-diff? ( m n -- ? )
 | 
					: sum-and-diff? ( m n -- ? )
 | 
				
			||||||
    2dup + -rot - [ pentagonal? ] bi@ and ;
 | 
					    [ + ] [ - ] 2bi [ pentagonal? ] bi@ and ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIVATE>
 | 
					PRIVATE>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,7 @@ PRIVATE>
 | 
				
			||||||
    [ first2 sum-and-diff? ] filter [ first2 - abs ] map infimum ;
 | 
					    [ first2 sum-and-diff? ] filter [ first2 - abs ] map infimum ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! [ euler044 ] 10 ave-time
 | 
					! [ euler044 ] 10 ave-time
 | 
				
			||||||
! 8924 ms run / 2872 ms GC ave time - 10 trials
 | 
					! 5727 ms ave run time - 1102.38 SD (10 trials)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! TODO: this solution is ugly and not very efficient...find a better algorithm
 | 
					! TODO: this solution is ugly and not very efficient...find a better algorithm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
! Copyright (c) 2008 Eric Mertens.
 | 
					! Copyright (c) 2008 Eric Mertens.
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: arrays assocs combinators kernel locals math math.order math.ranges
 | 
					USING: arrays assocs kernel locals.backend math math.order math.ranges
 | 
				
			||||||
    sequences ;
 | 
					    sequences ;
 | 
				
			||||||
IN: project-euler.076
 | 
					IN: project-euler.076
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,6 +55,6 @@ PRIVATE>
 | 
				
			||||||
    100 (euler076) ;
 | 
					    100 (euler076) ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! [ euler076 ] 100 ave-time
 | 
					! [ euler076 ] 100 ave-time
 | 
				
			||||||
! 704 ms run time - 100 trials
 | 
					! 560 ms ave run time - 17.74 SD (100 trials)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MAIN: euler076
 | 
					MAIN: euler076
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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 hashtables io.files kernel math math.parser
 | 
					USING: assocs io.encodings.ascii io.files kernel make math math.parser
 | 
				
			||||||
namespaces make io.encodings.ascii sequences sets ;
 | 
					    sequences sets ;
 | 
				
			||||||
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
 | 
				
			||||||
| 
						 | 
					@ -58,7 +58,7 @@ PRIVATE>
 | 
				
			||||||
    source-079 >edges topological-sort 10 digits>integer ;
 | 
					    source-079 >edges topological-sort 10 digits>integer ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! [ euler079 ] 100 ave-time
 | 
					! [ euler079 ] 100 ave-time
 | 
				
			||||||
! 2 ms run / 0 ms GC ave time - 100 trials
 | 
					! 1 ms ave run time - 1.41 SD (100 trials)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! TODO: prune and diff are relatively slow; topological sort could be
 | 
					! TODO: prune and diff are relatively slow; topological sort could be
 | 
				
			||||||
! cleaned up and generalized much better, but it works for this problem
 | 
					! cleaned up and generalized much better, but it works for this problem
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,7 +32,7 @@ IN: project-euler.092
 | 
				
			||||||
    0 swap [ dup zero? not ] [ 10 /mod sq -rot [ + ] dip ] [ ] while drop ;
 | 
					    0 swap [ dup zero? not ] [ 10 /mod sq -rot [ + ] dip ] [ ] while drop ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: chain-ending ( n -- m )
 | 
					: chain-ending ( n -- m )
 | 
				
			||||||
    dup 1 = over 89 = or [ next-link chain-ending ] unless ;
 | 
					    dup [ 1 = ] [ 89 = ] bi or [ next-link chain-ending ] unless ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: lower-endings ( -- seq )
 | 
					: lower-endings ( -- seq )
 | 
				
			||||||
    567 [1,b] [ chain-ending ] map ;
 | 
					    567 [1,b] [ chain-ending ] map ;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: arrays kernel make math math.functions math.matrices math.miller-rabin
 | 
					USING: arrays kernel make math math.functions math.matrices math.miller-rabin
 | 
				
			||||||
    math.order math.parser math.primes.factors math.ranges sequences
 | 
					    math.order math.parser math.primes.factors math.ranges sequences
 | 
				
			||||||
    sequences.lib sorting unicode.case ;
 | 
					    sequences.lib sorting strings unicode.case ;
 | 
				
			||||||
IN: project-euler.common
 | 
					IN: project-euler.common
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! A collection of words used by more than one Project Euler solution
 | 
					! A collection of words used by more than one Project Euler solution
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue