Clean up Project Euler solutions
parent
89db7676c4
commit
f2538d0156
|
@ -1,6 +1,6 @@
|
|||
! Copyright (c) 2007 Aaron Schaefer.
|
||||
! Copyright (c) 2007-2008 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel math math.functions math.ranges sequences ;
|
||||
USING: kernel math math.ranges sequences ;
|
||||
IN: project-euler.006
|
||||
|
||||
! http://projecteuler.net/index.php?section=problems&id=6
|
||||
|
@ -35,9 +35,9 @@ IN: project-euler.006
|
|||
PRIVATE>
|
||||
|
||||
: euler006 ( -- answer )
|
||||
1 100 [a,b] dup sum-of-squares swap square-of-sum - abs ;
|
||||
100 [1,b] [ sum-of-squares ] [ square-of-sum ] bi - abs ;
|
||||
|
||||
! [ euler006 ] 100 ave-time
|
||||
! 0 ms run / 0 ms GC ave time - 100 trials
|
||||
! 0 ms ave run time - 0.24 SD (100 trials)
|
||||
|
||||
MAIN: euler006
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (c) 2007 Aaron Schaefer.
|
||||
! Copyright (c) 2007-2008 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel math math.functions namespaces make sequences sorting ;
|
||||
USING: kernel make math sequences sorting ;
|
||||
IN: project-euler.009
|
||||
|
||||
! http://projecteuler.net/index.php?section=problems&id=9
|
||||
|
@ -30,14 +30,14 @@ IN: project-euler.009
|
|||
|
||||
: abc ( p q -- triplet )
|
||||
[
|
||||
2dup * , ! a = p * q
|
||||
[ sq ] bi@ 2dup - 2 / , ! b = (p² - q²) / 2
|
||||
+ 2 / , ! c = (p² + q²) / 2
|
||||
2dup * , ! a = p * q
|
||||
[ sq ] bi@
|
||||
[ - 2 / , ] ! b = (p² - q²) / 2
|
||||
[ + 2 / , ] 2bi ! c = (p² + q²) / 2
|
||||
] { } make natural-sort ;
|
||||
|
||||
: (ptriplet) ( target p q triplet -- target p q )
|
||||
roll [ swap sum = ] keep -roll
|
||||
[ next-pq 2dup abc (ptriplet) ] unless ;
|
||||
sum [ pick ] dip = [ next-pq 2dup abc (ptriplet) ] unless ;
|
||||
|
||||
: ptriplet ( target -- triplet )
|
||||
3 1 { 3 4 5 } (ptriplet) abc nip ;
|
||||
|
@ -48,6 +48,6 @@ PRIVATE>
|
|||
1000 ptriplet product ;
|
||||
|
||||
! [ euler009 ] 100 ave-time
|
||||
! 1 ms run / 0 ms GC ave time - 100 trials
|
||||
! 1 ms ave run time - 0.73 SD (100 trials)
|
||||
|
||||
MAIN: euler009
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
! Copyright (c) 2007 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: arrays combinators.short-circuit kernel
|
||||
math math.ranges namespaces make sequences sorting ;
|
||||
USING: combinators.short-circuit kernel make math math.ranges sequences ;
|
||||
IN: project-euler.014
|
||||
|
||||
! http://projecteuler.net/index.php?section=problems&id=14
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (c) 2007 Aaron Schaefer.
|
||||
! Copyright (c) 2007-2008 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: math.functions math.parser project-euler.common sequences ;
|
||||
USING: math.functions project-euler.common sequences ;
|
||||
IN: project-euler.016
|
||||
|
||||
! http://projecteuler.net/index.php?section=problems&id=16
|
||||
|
@ -20,6 +20,6 @@ IN: project-euler.016
|
|||
2 1000 ^ number>digits sum ;
|
||||
|
||||
! [ euler016 ] 100 ave-time
|
||||
! 0 ms run / 0 ms GC ave time - 100 trials
|
||||
! 0 ms ave run time - 0.67 SD (100 trials)
|
||||
|
||||
MAIN: euler016
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
! Copyright (c) 2007 Aaron Schaefer.
|
||||
! Copyright (c) 2007-2008 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel math.ranges math.text.english sequences strings
|
||||
ascii combinators.short-circuit ;
|
||||
USING: ascii kernel math.ranges math.text.english sequences ;
|
||||
IN: project-euler.017
|
||||
|
||||
! http://projecteuler.net/index.php?section=problems&id=17
|
||||
|
@ -26,7 +25,7 @@ IN: project-euler.017
|
|||
: euler017 ( -- answer )
|
||||
1000 [1,b] SBUF" " clone [ number>text over push-all ] reduce [ Letter? ] count ;
|
||||
|
||||
! [ euler017a ] 100 ave-time
|
||||
! 14 ms run / 0 ms GC ave time - 100 trials
|
||||
! [ euler017 ] 100 ave-time
|
||||
! 15 ms ave run time - 1.71 SD (100 trials)
|
||||
|
||||
MAIN: euler017
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (c) 2007 Aaron Schaefer.
|
||||
! Copyright (c) 2007-2008 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: math.combinatorics math.parser project-euler.common sequences ;
|
||||
USING: math.combinatorics project-euler.common sequences ;
|
||||
IN: project-euler.020
|
||||
|
||||
! http://projecteuler.net/index.php?section=problems&id=20
|
||||
|
@ -20,6 +20,6 @@ IN: project-euler.020
|
|||
100 factorial number>digits sum ;
|
||||
|
||||
! [ euler020 ] 100 ave-time
|
||||
! 0 ms run / 0 ms GC ave time - 100 trials
|
||||
! 0 ms ave run time - 0.55 (100 trials)
|
||||
|
||||
MAIN: euler020
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
! Copyright (c) 2008 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: hashtables kernel math math.ranges project-euler.common sequences
|
||||
sorting sets ;
|
||||
USING: kernel math math.ranges project-euler.common sequences sets sorting ;
|
||||
IN: project-euler.023
|
||||
|
||||
! http://projecteuler.net/index.php?section=problems&id=23
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (c) 2008 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.syntax kernel math math.constants math.functions math.parser
|
||||
math.ranges memoize project-euler.common sequences ;
|
||||
USING: kernel math math.constants math.functions math.parser memoize
|
||||
project-euler.common sequences ;
|
||||
IN: project-euler.025
|
||||
|
||||
! http://projecteuler.net/index.php?section=problems&id=25
|
||||
|
|
|
@ -30,7 +30,7 @@ IN: project-euler.028
|
|||
<PRIVATE
|
||||
|
||||
: sum-corners ( n -- sum )
|
||||
dup 1 = [ [ sq 4 * ] keep 6 * - 6 + ] unless ;
|
||||
dup 1 = [ [ sq 4 * ] [ 6 * ] bi - 6 + ] unless ;
|
||||
|
||||
: sum-diags ( n -- sum )
|
||||
1 swap 2 <range> [ sum-corners ] sigma ;
|
||||
|
@ -41,6 +41,6 @@ PRIVATE>
|
|||
1001 sum-diags ;
|
||||
|
||||
! [ euler028 ] 100 ave-time
|
||||
! 0 ms run / 0 ms GC ave time - 100 trials
|
||||
! 0 ms ave run time - 0.39 SD (100 trials)
|
||||
|
||||
MAIN: euler028
|
||||
|
|
|
@ -30,25 +30,25 @@ IN: project-euler.031
|
|||
drop 1 ;
|
||||
|
||||
: 2p ( m -- n )
|
||||
dup 0 >= [ [ 2 - 2p ] keep 1p + ] [ drop 0 ] if ;
|
||||
dup 0 >= [ [ 2 - 2p ] [ 1p ] bi + ] [ drop 0 ] if ;
|
||||
|
||||
: 5p ( m -- n )
|
||||
dup 0 >= [ [ 5 - 5p ] keep 2p + ] [ drop 0 ] if ;
|
||||
dup 0 >= [ [ 5 - 5p ] [ 2p ] bi + ] [ drop 0 ] if ;
|
||||
|
||||
: 10p ( m -- n )
|
||||
dup 0 >= [ [ 10 - 10p ] keep 5p + ] [ drop 0 ] if ;
|
||||
dup 0 >= [ [ 10 - 10p ] [ 5p ] bi + ] [ drop 0 ] if ;
|
||||
|
||||
: 20p ( m -- n )
|
||||
dup 0 >= [ [ 20 - 20p ] keep 10p + ] [ drop 0 ] if ;
|
||||
dup 0 >= [ [ 20 - 20p ] [ 10p ] bi + ] [ drop 0 ] if ;
|
||||
|
||||
: 50p ( m -- n )
|
||||
dup 0 >= [ [ 50 - 50p ] keep 20p + ] [ drop 0 ] if ;
|
||||
dup 0 >= [ [ 50 - 50p ] [ 20p ] bi + ] [ drop 0 ] if ;
|
||||
|
||||
: 100p ( m -- n )
|
||||
dup 0 >= [ [ 100 - 100p ] keep 50p + ] [ drop 0 ] if ;
|
||||
dup 0 >= [ [ 100 - 100p ] [ 50p ] bi + ] [ drop 0 ] if ;
|
||||
|
||||
: 200p ( m -- n )
|
||||
dup 0 >= [ [ 200 - 200p ] keep 100p + ] [ drop 0 ] if ;
|
||||
dup 0 >= [ [ 200 - 200p ] [ 100p ] bi + ] [ drop 0 ] if ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
|
@ -56,7 +56,7 @@ PRIVATE>
|
|||
200 200p ;
|
||||
|
||||
! [ euler031 ] 100 ave-time
|
||||
! 4 ms run / 0 ms GC ave time - 100 trials
|
||||
! 3 ms ave run time - 0.91 SD (100 trials)
|
||||
|
||||
! TODO: generalize to eliminate duplication; use a sequence to specify denominations?
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (c) 2008 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: hashtables kernel math math.combinatorics math.functions
|
||||
math.parser math.ranges project-euler.common sequences sets ;
|
||||
USING: kernel math math.combinatorics math.functions math.parser math.ranges
|
||||
project-euler.common sequences sets ;
|
||||
IN: project-euler.032
|
||||
|
||||
! http://projecteuler.net/index.php?section=problems&id=32
|
||||
|
@ -38,7 +38,7 @@ IN: project-euler.032
|
|||
[ string>number ] tri@ [ * ] dip = ;
|
||||
|
||||
: valid? ( n -- ? )
|
||||
dup 1and4 swap 2and3 or ;
|
||||
[ 1and4 ] [ 2and3 ] bi or ;
|
||||
|
||||
: products ( seq -- m )
|
||||
[ 10 4 ^ mod ] map ;
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
USING: arrays kernel math math.functions math.miller-rabin
|
||||
math.matrices math.order math.parser math.primes.factors
|
||||
math.ranges namespaces make sequences sequences.lib sorting
|
||||
unicode.case ;
|
||||
! Copyright (c) 2007-2008 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: arrays kernel math math.functions math.miller-rabin math.matrices
|
||||
math.order math.parser math.primes.factors math.ranges make namespaces
|
||||
sequences sequences.lib sorting unicode.case ;
|
||||
IN: project-euler.common
|
||||
|
||||
! A collection of words used by more than one Project Euler solution
|
||||
|
@ -26,7 +27,7 @@ IN: project-euler.common
|
|||
|
||||
|
||||
: nth-pair ( n seq -- nth next )
|
||||
over 1+ over nth >r nth r> ;
|
||||
2dup [ 1+ ] dip [ nth ] 2bi@ ;
|
||||
|
||||
: perfect-square? ( n -- ? )
|
||||
dup sqrt mod zero? ;
|
||||
|
@ -34,7 +35,7 @@ IN: project-euler.common
|
|||
<PRIVATE
|
||||
|
||||
: count-shifts ( seq width -- n )
|
||||
>r length 1+ r> - ;
|
||||
[ length 1+ ] dip - ;
|
||||
|
||||
: max-children ( seq -- seq )
|
||||
[ dup length 1- [ over nth-pair max , ] each ] { } make nip ;
|
||||
|
|
Loading…
Reference in New Issue