diff --git a/extra/project-euler/006/006.factor b/extra/project-euler/006/006.factor index fb4fb954fa..3e2bf19f4a 100644 --- a/extra/project-euler/006/006.factor +++ b/extra/project-euler/006/006.factor @@ -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 diff --git a/extra/project-euler/009/009.factor b/extra/project-euler/009/009.factor index c1a4a16918..2578808926 100644 --- a/extra/project-euler/009/009.factor +++ b/extra/project-euler/009/009.factor @@ -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 diff --git a/extra/project-euler/014/014.factor b/extra/project-euler/014/014.factor index dc0c060b22..93ed0c7754 100644 --- a/extra/project-euler/014/014.factor +++ b/extra/project-euler/014/014.factor @@ -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 diff --git a/extra/project-euler/016/016.factor b/extra/project-euler/016/016.factor index 00747a9317..80bbbbaec3 100644 --- a/extra/project-euler/016/016.factor +++ b/extra/project-euler/016/016.factor @@ -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 diff --git a/extra/project-euler/017/017.factor b/extra/project-euler/017/017.factor index 5f6541873a..b47e2429f2 100644 --- a/extra/project-euler/017/017.factor +++ b/extra/project-euler/017/017.factor @@ -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 diff --git a/extra/project-euler/020/020.factor b/extra/project-euler/020/020.factor index 8ac75bd9ff..42d352858c 100644 --- a/extra/project-euler/020/020.factor +++ b/extra/project-euler/020/020.factor @@ -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 diff --git a/extra/project-euler/023/023.factor b/extra/project-euler/023/023.factor index 6b38a2b6ac..80aa40f449 100644 --- a/extra/project-euler/023/023.factor +++ b/extra/project-euler/023/023.factor @@ -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 diff --git a/extra/project-euler/025/025.factor b/extra/project-euler/025/025.factor index 2786d9f0e6..6d15a9f6ec 100644 --- a/extra/project-euler/025/025.factor +++ b/extra/project-euler/025/025.factor @@ -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 diff --git a/extra/project-euler/028/028.factor b/extra/project-euler/028/028.factor index d0f3892956..cd359c70a9 100644 --- a/extra/project-euler/028/028.factor +++ b/extra/project-euler/028/028.factor @@ -30,7 +30,7 @@ IN: project-euler.028 [ 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 diff --git a/extra/project-euler/031/031.factor b/extra/project-euler/031/031.factor index 4be866dc03..1b6d1c83eb 100644 --- a/extra/project-euler/031/031.factor +++ b/extra/project-euler/031/031.factor @@ -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? diff --git a/extra/project-euler/032/032.factor b/extra/project-euler/032/032.factor index f9667c75fe..02c1d44e43 100755 --- a/extra/project-euler/032/032.factor +++ b/extra/project-euler/032/032.factor @@ -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 ; diff --git a/extra/project-euler/common/common.factor b/extra/project-euler/common/common.factor index 094893616b..aa7781dc46 100644 --- a/extra/project-euler/common/common.factor +++ b/extra/project-euler/common/common.factor @@ -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 r length 1+ r> - ; + [ length 1+ ] dip - ; : max-children ( seq -- seq ) [ dup length 1- [ over nth-pair max , ] each ] { } make nip ;