From f2538d015679a569fb1fc70490b56a10ca9752b5 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Thu, 30 Oct 2008 22:04:44 -0400 Subject: [PATCH 01/14] Clean up Project Euler solutions --- extra/project-euler/006/006.factor | 8 ++++---- extra/project-euler/009/009.factor | 16 ++++++++-------- extra/project-euler/014/014.factor | 3 +-- extra/project-euler/016/016.factor | 6 +++--- extra/project-euler/017/017.factor | 9 ++++----- extra/project-euler/020/020.factor | 6 +++--- extra/project-euler/023/023.factor | 3 +-- extra/project-euler/025/025.factor | 4 ++-- extra/project-euler/028/028.factor | 4 ++-- extra/project-euler/031/031.factor | 16 ++++++++-------- extra/project-euler/032/032.factor | 6 +++--- extra/project-euler/common/common.factor | 13 +++++++------ 12 files changed, 46 insertions(+), 48 deletions(-) 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 ; From 3127cfdddced93985cdc053bef4c1e3ef37cff82 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Thu, 30 Oct 2008 23:34:32 -0400 Subject: [PATCH 02/14] Use clump instead of collect-consecutive in PE --- extra/project-euler/008/008.factor | 8 ++++---- extra/project-euler/011/011.factor | 9 ++++----- extra/project-euler/common/common.factor | 18 +++--------------- 3 files changed, 11 insertions(+), 24 deletions(-) diff --git a/extra/project-euler/008/008.factor b/extra/project-euler/008/008.factor index 8b32d5651e..24ccbb443a 100644 --- a/extra/project-euler/008/008.factor +++ b/extra/project-euler/008/008.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.parser project-euler.common sequences ; +USING: grouping math.parser sequences ; IN: project-euler.008 ! http://projecteuler.net/index.php?section=problems&id=8 @@ -64,9 +64,9 @@ IN: project-euler.008 PRIVATE> : euler008 ( -- answer ) - source-008 5 collect-consecutive [ string>digits product ] map supremum ; + source-008 5 clump [ string>digits product ] map supremum ; ! [ euler008 ] 100 ave-time -! 11 ms run / 0 ms GC ave time - 100 trials +! 2 ms ave run time - 0.79 SD (100 trials) MAIN: euler008 diff --git a/extra/project-euler/011/011.factor b/extra/project-euler/011/011.factor index f4e549c7c0..0940695726 100644 --- a/extra/project-euler/011/011.factor +++ b/extra/project-euler/011/011.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 namespaces make project-euler.common sequences -splitting grouping ; +USING: grouping kernel make sequences ; IN: project-euler.011 ! http://projecteuler.net/index.php?section=problems&id=11 @@ -88,7 +87,7 @@ IN: project-euler.011 horizontal pad-front pad-back flip ; : max-product ( matrix width -- n ) - [ collect-consecutive ] curry map concat + [ clump ] curry map concat [ product ] map supremum ; inline PRIVATE> @@ -100,6 +99,6 @@ PRIVATE> ] { } make supremum ; ! [ euler011 ] 100 ave-time -! 4 ms run / 0 ms GC ave time - 100 trials +! 3 ms ave run time - 0.77 SD (100 trials) MAIN: euler011 diff --git a/extra/project-euler/common/common.factor b/extra/project-euler/common/common.factor index aa7781dc46..5d1aa16a32 100644 --- a/extra/project-euler/common/common.factor +++ b/extra/project-euler/common/common.factor @@ -1,8 +1,8 @@ ! 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 ; +USING: arrays kernel make math math.functions math.matrices math.miller-rabin + math.order math.parser math.primes.factors math.ranges sequences + sequences.lib sorting unicode.case ; IN: project-euler.common ! A collection of words used by more than one Project Euler solution @@ -12,7 +12,6 @@ IN: project-euler.common ! ------------------------------- ! alpha-value - #22, #42 ! cartesian-product - #4, #27, #29, #32, #33, #43, #44, #56 -! collect-consecutive - #8, #11 ! log10 - #25, #134 ! max-path - #18, #67 ! nth-triangle - #12, #42 @@ -34,9 +33,6 @@ IN: project-euler.common fixnum [1,b] [ [ 2dup mod zero? [ 2dup / + , ] [ drop ] if ] each @@ -64,11 +57,6 @@ PRIVATE> : cartesian-product ( seq1 seq2 -- seq1xseq2 ) swap [ swap [ 2array ] map-with ] map-with concat ; -: collect-consecutive ( seq width -- seq ) - [ - 2dup count-shifts [ 2dup head shift-3rd , ] times - ] { } make 2nip ; - : log10 ( m -- n ) log 10 log / ; From 852c16a79b663ca9bc29d21e2a32e52477ee6f7b Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Fri, 31 Oct 2008 01:35:37 -0400 Subject: [PATCH 03/14] Fix sorting string equality issue in Project Euler --- extra/project-euler/006/006.factor | 2 +- extra/project-euler/009/009.factor | 2 +- extra/project-euler/016/016.factor | 2 +- extra/project-euler/017/017.factor | 2 +- extra/project-euler/020/020.factor | 2 +- extra/project-euler/038/038.factor | 3 ++- extra/project-euler/common/common.factor | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/extra/project-euler/006/006.factor b/extra/project-euler/006/006.factor index 3e2bf19f4a..2149353658 100644 --- a/extra/project-euler/006/006.factor +++ b/extra/project-euler/006/006.factor @@ -1,4 +1,4 @@ -! Copyright (c) 2007-2008 Aaron Schaefer. +! Copyright (c) 2007, 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: kernel math math.ranges sequences ; IN: project-euler.006 diff --git a/extra/project-euler/009/009.factor b/extra/project-euler/009/009.factor index 2578808926..a1040d2bf2 100644 --- a/extra/project-euler/009/009.factor +++ b/extra/project-euler/009/009.factor @@ -1,4 +1,4 @@ -! Copyright (c) 2007-2008 Aaron Schaefer. +! Copyright (c) 2007, 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: kernel make math sequences sorting ; IN: project-euler.009 diff --git a/extra/project-euler/016/016.factor b/extra/project-euler/016/016.factor index 80bbbbaec3..216fcb3523 100644 --- a/extra/project-euler/016/016.factor +++ b/extra/project-euler/016/016.factor @@ -1,4 +1,4 @@ -! Copyright (c) 2007-2008 Aaron Schaefer. +! Copyright (c) 2007, 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: math.functions project-euler.common sequences ; IN: project-euler.016 diff --git a/extra/project-euler/017/017.factor b/extra/project-euler/017/017.factor index b47e2429f2..21e277da00 100644 --- a/extra/project-euler/017/017.factor +++ b/extra/project-euler/017/017.factor @@ -1,4 +1,4 @@ -! Copyright (c) 2007-2008 Aaron Schaefer. +! Copyright (c) 2007, 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: ascii kernel math.ranges math.text.english sequences ; IN: project-euler.017 diff --git a/extra/project-euler/020/020.factor b/extra/project-euler/020/020.factor index 42d352858c..e75747b57c 100644 --- a/extra/project-euler/020/020.factor +++ b/extra/project-euler/020/020.factor @@ -1,4 +1,4 @@ -! Copyright (c) 2007-2008 Aaron Schaefer. +! Copyright (c) 2007, 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: math.combinatorics project-euler.common sequences ; IN: project-euler.020 diff --git a/extra/project-euler/038/038.factor b/extra/project-euler/038/038.factor index 78e3848a33..05bab5fc36 100755 --- a/extra/project-euler/038/038.factor +++ b/extra/project-euler/038/038.factor @@ -1,6 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math math.parser math.ranges project-euler.common sequences ; +USING: kernel math math.parser math.ranges project-euler.common sequences + strings ; IN: project-euler.038 ! http://projecteuler.net/index.php?section=problems&id=38 diff --git a/extra/project-euler/common/common.factor b/extra/project-euler/common/common.factor index 5d1aa16a32..c609d82747 100644 --- a/extra/project-euler/common/common.factor +++ b/extra/project-euler/common/common.factor @@ -77,7 +77,7 @@ PRIVATE> number>string dup reverse = ; : pandigital? ( n -- ? ) - number>string natural-sort "123456789" = ; + number>string natural-sort >string "123456789" = ; : pentagonal? ( n -- ? ) dup 0 > [ 24 * 1+ sqrt 1+ 6 / 1 mod zero? ] [ drop f ] if ; From 92e2ee3509da904cc7e8be6328277e1f7f82f879 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Mon, 3 Nov 2008 16:20:36 -0500 Subject: [PATCH 04/14] Clean up Projece Euler solutions --- extra/project-euler/042/042.factor | 4 ++-- extra/project-euler/043/043.factor | 11 +++++------ extra/project-euler/044/044.factor | 4 ++-- extra/project-euler/076/076.factor | 4 ++-- extra/project-euler/079/079.factor | 6 +++--- extra/project-euler/092/092.factor | 2 +- extra/project-euler/common/common.factor | 2 +- 7 files changed, 16 insertions(+), 17 deletions(-) diff --git a/extra/project-euler/042/042.factor b/extra/project-euler/042/042.factor index 8ae95d6db7..009570d92c 100644 --- a/extra/project-euler/042/042.factor +++ b/extra/project-euler/042/042.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: ascii io.files kernel math math.functions namespaces make - project-euler.common sequences splitting io.encodings.ascii ; +USING: ascii io.encodings.ascii io.files kernel make math math.functions + namespaces project-euler.common sequences splitting ; IN: project-euler.042 ! http://projecteuler.net/index.php?section=problems&id=42 diff --git a/extra/project-euler/043/043.factor b/extra/project-euler/043/043.factor index 84ed7a830f..9eb78e5153 100644 --- a/extra/project-euler/043/043.factor +++ b/extra/project-euler/043/043.factor @@ -1,8 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: combinators.short-circuit hashtables kernel math - math.combinatorics math.parser math.ranges project-euler.common sequences - sorting sets ; +USING: combinators.short-circuit kernel math math.combinatorics math.parser + math.ranges project-euler.common sequences sets sorting ; IN: project-euler.043 ! http://projecteuler.net/index.php?section=problems&id=43 @@ -74,13 +73,13 @@ PRIVATE> 1000 over [ number>digits 3 0 pad-left ] map [ all-unique? ] filter ; : overlap? ( seq -- ? ) - dup first 2 tail* swap second 2 head = ; + [ first 2 tail* ] [ second 2 head ] bi = ; : clean ( seq -- seq ) [ unclip 1 head prefix concat ] map [ all-unique? ] filter ; : add-missing-digit ( seq -- seq ) - dup natural-sort 10 swap diff first prefix ; + dup natural-sort 10 swap diff prepend ; : interesting-pandigitals ( -- seq ) 17 candidates { 13 11 7 5 3 2 } [ @@ -93,6 +92,6 @@ PRIVATE> interesting-pandigitals [ 10 digits>integer ] sigma ; ! [ 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 diff --git a/extra/project-euler/044/044.factor b/extra/project-euler/044/044.factor index eaa6bf96ef..0af3a3167e 100644 --- a/extra/project-euler/044/044.factor +++ b/extra/project-euler/044/044.factor @@ -31,7 +31,7 @@ IN: project-euler.044 dup 3 * 1- * 2 / ; : sum-and-diff? ( m n -- ? ) - 2dup + -rot - [ pentagonal? ] bi@ and ; + [ + ] [ - ] 2bi [ pentagonal? ] bi@ and ; PRIVATE> @@ -40,7 +40,7 @@ PRIVATE> [ first2 sum-and-diff? ] filter [ first2 - abs ] map infimum ; ! [ 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 diff --git a/extra/project-euler/076/076.factor b/extra/project-euler/076/076.factor index 3530f2163a..528cb656bb 100644 --- a/extra/project-euler/076/076.factor +++ b/extra/project-euler/076/076.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Eric Mertens. ! 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 ; IN: project-euler.076 @@ -55,6 +55,6 @@ PRIVATE> 100 (euler076) ; ! [ euler076 ] 100 ave-time -! 704 ms run time - 100 trials +! 560 ms ave run time - 17.74 SD (100 trials) MAIN: euler076 diff --git a/extra/project-euler/079/079.factor b/extra/project-euler/079/079.factor index 99c70ba038..29b76c7ba4 100644 --- a/extra/project-euler/079/079.factor +++ b/extra/project-euler/079/079.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: assocs hashtables io.files kernel math math.parser -namespaces make io.encodings.ascii sequences sets ; +USING: assocs io.encodings.ascii io.files kernel make math math.parser + sequences sets ; IN: project-euler.079 ! http://projecteuler.net/index.php?section=problems&id=79 @@ -58,7 +58,7 @@ PRIVATE> source-079 >edges topological-sort 10 digits>integer ; ! [ 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 ! cleaned up and generalized much better, but it works for this problem diff --git a/extra/project-euler/092/092.factor b/extra/project-euler/092/092.factor index 7e44a509ab..ea131d6e1b 100644 --- a/extra/project-euler/092/092.factor +++ b/extra/project-euler/092/092.factor @@ -32,7 +32,7 @@ IN: project-euler.092 0 swap [ dup zero? not ] [ 10 /mod sq -rot [ + ] dip ] [ ] while drop ; : 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 ) 567 [1,b] [ chain-ending ] map ; diff --git a/extra/project-euler/common/common.factor b/extra/project-euler/common/common.factor index c609d82747..d87aecb6a8 100644 --- a/extra/project-euler/common/common.factor +++ b/extra/project-euler/common/common.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays kernel make math math.functions math.matrices math.miller-rabin 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 ! A collection of words used by more than one Project Euler solution From 9152b6d5f0b1c47b9ffbc448eaa3315456f389b1 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Mon, 3 Nov 2008 18:25:50 -0500 Subject: [PATCH 05/14] Cleanup of Project Euler problem 92 --- extra/project-euler/092/092.factor | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/extra/project-euler/092/092.factor b/extra/project-euler/092/092.factor index ea131d6e1b..c778fd9525 100644 --- a/extra/project-euler/092/092.factor +++ b/extra/project-euler/092/092.factor @@ -1,6 +1,6 @@ ! Copyright (c) 2008 Aaron Schaefer, Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math math.ranges sequences ; +USING: kernel math math.ranges project-euler.common sequences ; IN: project-euler.092 ! http://projecteuler.net/index.php?section=problems&id=92 @@ -29,7 +29,7 @@ IN: project-euler.092 digits [ sq ] sigma ; : chain-ending ( n -- m ) dup [ 1 = ] [ 89 = ] bi or [ next-link chain-ending ] unless ; @@ -40,15 +40,14 @@ IN: project-euler.092 : fast-chain-ending ( seq n -- m ) dup 567 > [ next-link ] when 1- swap nth ; -: count ( seq quot -- n ) - 0 -rot [ rot >r call [ r> 1+ ] [ r> ] if ] curry each ; inline - PRIVATE> : euler092 ( -- answer ) lower-endings 9999999 [1,b] [ fast-chain-ending 89 = ] with count ; ! [ euler092 ] 10 ave-time -! 11169 ms run / 0 ms GC ave time - 10 trials +! 33257 ms ave run time - 624.27 SD (10 trials) + +! TODO: this solution is not very efficient, much better optimizations exist MAIN: euler092 From 9be67e7df7e27c5ea3189429d02b0bc0aea078bb Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Mon, 3 Nov 2008 19:02:57 -0500 Subject: [PATCH 06/14] Add meta data to Project Euler problem 186 --- extra/project-euler/186/186.factor | 43 ++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/extra/project-euler/186/186.factor b/extra/project-euler/186/186.factor index 7504e09a81..b86f3675a1 100644 --- a/extra/project-euler/186/186.factor +++ b/extra/project-euler/186/186.factor @@ -1,7 +1,43 @@ -USING: circular disjoint-sets kernel math math.ranges -sequences ; +! Copyright (c) 2008 Eric Mertens. +! See http://factorcode.org/license.txt for BSD license. +USING: circular disjoint-sets kernel math math.ranges sequences ; IN: project-euler.186 +! http://projecteuler.net/index.php?section=problems&id=186 + +! DESCRIPTION +! ----------- + +! Here are the records from a busy telephone system with one million users: + +! RecNr Caller Called +! 1 200007 100053 +! 2 600183 500439 +! 3 600863 701497 +! ... ... ... + +! The telephone number of the caller and the called number in record n are +! Caller(n) = S2n-1 and Called(n) = S2n where S1,2,3,... come from the "Lagged +! Fibonacci Generator": + +! For 1 <= k <= 55, Sk = [100003 - 200003k + 300007k^3] (modulo 1000000) +! For 56 <= k, Sk = [Sk-24 + Sk-55] (modulo 1000000) + +! If Caller(n) = Called(n) then the user is assumed to have misdialled and the +! call fails; otherwise the call is successful. + +! From the start of the records, we say that any pair of users X and Y are +! friends if X calls Y or vice-versa. Similarly, X is a friend of a friend of Z +! if X is a friend of Y and Y is a friend of Z; and so on for longer chains. + +! The Prime Minister's phone number is 524287. After how many successful calls, +! not counting misdials, will 99% of the users (including the PM) be a friend, +! or a friend of a friend etc., of the Prime Minister? + + +! SOLUTION +! -------- + : (generator) ( k -- n ) dup sq 300007 * 200003 - * 100003 + 1000000 rem ; @@ -35,4 +71,7 @@ IN: project-euler.186 : euler186 ( -- n ) 0 1000000 (p186) ; +! [ euler186 ] 10 ave-time +! 18572 ms ave run time - 796.87 SD (10 trials) + MAIN: euler186 From 9d063158098696097b0622d4c5f776a2567e9d73 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Mon, 3 Nov 2008 20:14:37 -0500 Subject: [PATCH 07/14] Clean up of common Project Euler code --- extra/project-euler/common/common.factor | 18 ++++++++++-------- extra/project-euler/project-euler.factor | 12 ++++++------ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/extra/project-euler/common/common.factor b/extra/project-euler/common/common.factor index d87aecb6a8..d3263bbc1e 100644 --- a/extra/project-euler/common/common.factor +++ b/extra/project-euler/common/common.factor @@ -15,7 +15,7 @@ IN: project-euler.common ! log10 - #25, #134 ! max-path - #18, #67 ! nth-triangle - #12, #42 -! number>digits - #16, #20, #30, #34, #35, #38, #43, #52, #55, #56 +! number>digits - #16, #20, #30, #34, #35, #38, #43, #52, #55, #56, #92 ! palindrome? - #4, #36, #55 ! pandigital? - #32, #38 ! pentagonal? - #44, #45 @@ -25,8 +25,8 @@ IN: project-euler.common ! [uad]-transform - #39, #75 -: nth-pair ( n seq -- nth next ) - 2dup [ 1+ ] dip [ nth ] 2bi@ ; +: nth-pair ( seq n -- nth next ) + tail-slice first2 ; : perfect-square? ( n -- ? ) dup sqrt mod zero? ; @@ -34,7 +34,7 @@ IN: project-euler.common ! Not strictly needed, but it is nice to be able to dump the triangle after the ! propagation -: propagate-all ( triangle -- newtriangle ) - reverse [ first dup ] keep rest [ propagate dup ] map nip reverse swap suffix ; +: propagate-all ( triangle -- new-triangle ) + reverse [ first dup ] [ rest ] bi + [ propagate dup ] map nip reverse swap suffix ; : sum-divisors ( n -- sum ) dup 4 < [ { 0 1 3 4 } nth ] [ (sum-divisors) ] if ; @@ -108,8 +109,9 @@ PRIVATE> ! Optimized brute-force, is often faster than prime factorization : tau* ( m -- n ) - factor-2s [ 1+ ] dip [ perfect-square? -1 0 ? ] keep - dup sqrt >fixnum [1,b] [ + factor-2s dup [ 1+ ] + [ perfect-square? -1 0 ? ] + [ dup sqrt >fixnum [1,b] ] tri* [ dupd mod zero? [ [ 2 + ] dip ] when ] each drop * ; diff --git a/extra/project-euler/project-euler.factor b/extra/project-euler/project-euler.factor index 9dfaad0e7b..5192e23a27 100644 --- a/extra/project-euler/project-euler.factor +++ b/extra/project-euler/project-euler.factor @@ -14,12 +14,12 @@ USING: definitions io io.files kernel math math.parser project-euler.ave-time project-euler.037 project-euler.038 project-euler.039 project-euler.040 project-euler.041 project-euler.042 project-euler.043 project-euler.044 project-euler.045 project-euler.046 project-euler.047 project-euler.048 - project-euler.052 project-euler.053 project-euler.056 project-euler.059 - project-euler.067 project-euler.075 project-euler.079 project-euler.092 - project-euler.097 project-euler.100 project-euler.116 project-euler.117 - project-euler.134 project-euler.148 project-euler.150 project-euler.151 - project-euler.164 project-euler.169 project-euler.173 project-euler.175 - project-euler.186 project-euler.190 ; + project-euler.052 project-euler.053 project-euler.055 project-euler.056 + project-euler.059 project-euler.067 project-euler.075 project-euler.076 + project-euler.079 project-euler.092 project-euler.097 project-euler.100 + project-euler.116 project-euler.117 project-euler.134 project-euler.148 + project-euler.150 project-euler.151 project-euler.164 project-euler.169 + project-euler.173 project-euler.175 project-euler.186 project-euler.190 ; IN: project-euler Date: Mon, 3 Nov 2008 22:56:32 -0500 Subject: [PATCH 08/14] Rewrite of collect-benchmarks in ave-time vocab --- extra/project-euler/ave-time/ave-time.factor | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/extra/project-euler/ave-time/ave-time.factor b/extra/project-euler/ave-time/ave-time.factor index df96d5e211..2a516513a5 100644 --- a/extra/project-euler/ave-time/ave-time.factor +++ b/extra/project-euler/ave-time/ave-time.factor @@ -1,20 +1,21 @@ ! Copyright (c) 2007 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: continuations io kernel math math.functions math.parser math.statistics - namespaces make tools.time ; +USING: continuations fry io kernel make math math.functions math.parser + math.statistics memory tools.time ; IN: project-euler.ave-time : collect-benchmarks ( quot n -- seq ) - [ - >r >r datastack r> [ benchmark , ] curry tuck - [ with-datastack drop ] 2curry r> swap times call - ] { } make ; + [ + [ datastack ] + [ '[ _ gc benchmark , ] tuck '[ _ _ with-datastack drop ] ] + [ 1- ] tri* swap times call + ] { } make ; : nth-place ( x n -- y ) 10 swap ^ [ * round ] keep / ; : ave-time ( quot n -- ) - [ collect-benchmarks ] keep - swap [ std 2 nth-place ] [ mean round ] bi [ + [ collect-benchmarks ] keep swap + [ std 2 nth-place ] [ mean round ] bi [ # " ms ave run time - " % # " SD (" % # " trials)" % ] "" make print flush ; inline From e763b5a3353085237f02917516746a196aef6457 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Tue, 4 Nov 2008 01:04:03 -0500 Subject: [PATCH 09/14] Add unit tests for Project Euler --- extra/project-euler/001/001-tests.factor | 6 ++++++ extra/project-euler/002/002-tests.factor | 5 +++++ extra/project-euler/002/002.factor | 11 ++++++----- extra/project-euler/003/003-tests.factor | 4 ++++ extra/project-euler/003/003.factor | 6 +++--- extra/project-euler/004/004-tests.factor | 4 ++++ extra/project-euler/004/004.factor | 2 +- extra/project-euler/005/005-tests.factor | 4 ++++ extra/project-euler/005/005.factor | 2 +- extra/project-euler/006/006-tests.factor | 4 ++++ extra/project-euler/007/007-tests.factor | 4 ++++ extra/project-euler/007/007.factor | 2 +- extra/project-euler/076/076.factor | 3 +-- 13 files changed, 44 insertions(+), 13 deletions(-) create mode 100644 extra/project-euler/001/001-tests.factor create mode 100644 extra/project-euler/002/002-tests.factor create mode 100644 extra/project-euler/003/003-tests.factor create mode 100644 extra/project-euler/004/004-tests.factor create mode 100644 extra/project-euler/005/005-tests.factor create mode 100644 extra/project-euler/006/006-tests.factor create mode 100644 extra/project-euler/007/007-tests.factor diff --git a/extra/project-euler/001/001-tests.factor b/extra/project-euler/001/001-tests.factor new file mode 100644 index 0000000000..8d2461a510 --- /dev/null +++ b/extra/project-euler/001/001-tests.factor @@ -0,0 +1,6 @@ +USING: project-euler.001 tools.test ; +IN: project-euler.001.tests + +[ 233168 ] [ euler001 ] unit-test +[ 233168 ] [ euler001a ] unit-test +[ 233168 ] [ euler001b ] unit-test diff --git a/extra/project-euler/002/002-tests.factor b/extra/project-euler/002/002-tests.factor new file mode 100644 index 0000000000..bb02518580 --- /dev/null +++ b/extra/project-euler/002/002-tests.factor @@ -0,0 +1,5 @@ +USING: project-euler.002 tools.test ; +IN: project-euler.002.tests + +[ 4613732 ] [ euler002 ] unit-test +[ 4613732 ] [ euler002a ] unit-test diff --git a/extra/project-euler/002/002.factor b/extra/project-euler/002/002.factor index 7bd77a2f68..fae535cba9 100644 --- a/extra/project-euler/002/002.factor +++ b/extra/project-euler/002/002.factor @@ -13,7 +13,8 @@ IN: project-euler.002 ! 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... -! Find the sum of all the even-valued terms in the sequence which do not exceed one million. +! Find the sum of all the even-valued terms in the sequence which do not exceed +! four million. ! SOLUTION @@ -30,10 +31,10 @@ PRIVATE> V{ 0 } clone 1 rot (fib-upto) ; : euler002 ( -- answer ) - 1000000 fib-upto [ even? ] filter sum ; + 4000000 fib-upto [ even? ] filter sum ; ! [ euler002 ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.22 SD (100 trials) ! ALTERNATE SOLUTIONS @@ -44,9 +45,9 @@ PRIVATE> but-last-slice { 0 1 } prepend ; : euler002a ( -- answer ) - 1000000 fib-upto* [ even? ] filter sum ; + 4000000 fib-upto* [ even? ] filter sum ; ! [ euler002a ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.2 SD (100 trials) MAIN: euler002a diff --git a/extra/project-euler/003/003-tests.factor b/extra/project-euler/003/003-tests.factor new file mode 100644 index 0000000000..ab136a8c20 --- /dev/null +++ b/extra/project-euler/003/003-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.003 tools.test ; +IN: project-euler.003.tests + +[ 6857 ] [ euler003 ] unit-test diff --git a/extra/project-euler/003/003.factor b/extra/project-euler/003/003.factor index afc4069aee..09374bcee3 100644 --- a/extra/project-euler/003/003.factor +++ b/extra/project-euler/003/003.factor @@ -10,16 +10,16 @@ IN: project-euler.003 ! The prime factors of 13195 are 5, 7, 13 and 29. -! What is the largest prime factor of the number 317584931803? +! What is the largest prime factor of the number 600851475143 ? ! SOLUTION ! -------- : euler003 ( -- answer ) - 317584931803 factors supremum ; + 600851475143 factors supremum ; ! [ euler003 ] 100 ave-time -! 1 ms run / 0 ms GC ave time - 100 trials +! 1 ms ave run time - 0.49 SD (100 trials) MAIN: euler003 diff --git a/extra/project-euler/004/004-tests.factor b/extra/project-euler/004/004-tests.factor new file mode 100644 index 0000000000..6640e7e411 --- /dev/null +++ b/extra/project-euler/004/004-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.004 tools.test ; +IN: project-euler.004.tests + +[ 906609 ] [ euler004 ] unit-test diff --git a/extra/project-euler/004/004.factor b/extra/project-euler/004/004.factor index 1f268f1500..eb5f97b2de 100644 --- a/extra/project-euler/004/004.factor +++ b/extra/project-euler/004/004.factor @@ -32,6 +32,6 @@ PRIVATE> source-004 dup cartesian-product [ product ] map prune max-palindrome ; ! [ euler004 ] 100 ave-time -! 1608 ms run / 102 ms GC ave time - 100 trials +! 1164 ms ave run time - 39.35 SD (100 trials) MAIN: euler004 diff --git a/extra/project-euler/005/005-tests.factor b/extra/project-euler/005/005-tests.factor new file mode 100644 index 0000000000..1d17b2e432 --- /dev/null +++ b/extra/project-euler/005/005-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.005 tools.test ; +IN: project-euler.005.tests + +[ 232792560 ] [ euler005 ] unit-test diff --git a/extra/project-euler/005/005.factor b/extra/project-euler/005/005.factor index 0d8f11f243..8b446f2376 100644 --- a/extra/project-euler/005/005.factor +++ b/extra/project-euler/005/005.factor @@ -21,6 +21,6 @@ IN: project-euler.005 20 1 [ 1+ lcm ] reduce ; ! [ euler005 ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.14 SD (100 trials) MAIN: euler005 diff --git a/extra/project-euler/006/006-tests.factor b/extra/project-euler/006/006-tests.factor new file mode 100644 index 0000000000..56fbbd3421 --- /dev/null +++ b/extra/project-euler/006/006-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.006 tools.test ; +IN: project-euler.006.tests + +[ 25164150 ] [ euler006 ] unit-test diff --git a/extra/project-euler/007/007-tests.factor b/extra/project-euler/007/007-tests.factor new file mode 100644 index 0000000000..ab2bf1547c --- /dev/null +++ b/extra/project-euler/007/007-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.007 tools.test ; +IN: project-euler.007.tests + +[ 104743 ] [ euler007 ] unit-test diff --git a/extra/project-euler/007/007.factor b/extra/project-euler/007/007.factor index 04686a8328..f2b659fe94 100644 --- a/extra/project-euler/007/007.factor +++ b/extra/project-euler/007/007.factor @@ -24,6 +24,6 @@ IN: project-euler.007 10001 nth-prime ; ! [ euler007 ] 100 ave-time -! 10 ms run / 0 ms GC ave time - 100 trials +! 5 ms ave run time - 1.13 SD (100 trials) MAIN: euler007 diff --git a/extra/project-euler/076/076.factor b/extra/project-euler/076/076.factor index 528cb656bb..e332d9ef3e 100644 --- a/extra/project-euler/076/076.factor +++ b/extra/project-euler/076/076.factor @@ -1,7 +1,6 @@ ! Copyright (c) 2008 Eric Mertens. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays assocs kernel locals.backend math math.order math.ranges - sequences ; +USING: arrays assocs kernel locals math math.order math.ranges sequences ; IN: project-euler.076 ! http://projecteuler.net/index.php?section=problems&id=76 From b5b207a484afc6fbf647916720192ce7f8adf936 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Wed, 5 Nov 2008 01:11:15 -0500 Subject: [PATCH 10/14] Add test files for all Project Euler solutions --- extra/project-euler/008/008-tests.factor | 4 ++++ extra/project-euler/009/009-tests.factor | 4 ++++ extra/project-euler/010/010-tests.factor | 4 ++++ extra/project-euler/010/010.factor | 11 +++++++---- extra/project-euler/011/011-tests.factor | 4 ++++ extra/project-euler/012/012-tests.factor | 4 ++++ extra/project-euler/012/012.factor | 2 +- extra/project-euler/013/013-tests.factor | 4 ++++ extra/project-euler/013/013.factor | 2 +- extra/project-euler/014/014-tests.factor | 5 +++++ extra/project-euler/015/015-tests.factor | 4 ++++ extra/project-euler/015/015.factor | 2 +- extra/project-euler/016/016-tests.factor | 4 ++++ extra/project-euler/017/017-tests.factor | 4 ++++ extra/project-euler/018/018-tests.factor | 5 +++++ extra/project-euler/018/018.factor | 4 ++-- extra/project-euler/019/019-tests.factor | 5 +++++ extra/project-euler/019/019.factor | 4 ++-- extra/project-euler/020/020-tests.factor | 4 ++++ extra/project-euler/021/021-tests.factor | 4 ++++ extra/project-euler/021/021.factor | 2 +- extra/project-euler/022/022-tests.factor | 4 ++++ extra/project-euler/022/022.factor | 2 +- extra/project-euler/023/023-tests.factor | 4 ++++ extra/project-euler/024/024-tests.factor | 4 ++++ extra/project-euler/024/024.factor | 2 +- extra/project-euler/025/025-tests.factor | 5 +++++ extra/project-euler/025/025.factor | 4 ++-- extra/project-euler/026/026-tests.factor | 4 ++++ extra/project-euler/026/026.factor | 2 +- extra/project-euler/027/027-tests.factor | 4 ++++ extra/project-euler/027/027.factor | 2 +- extra/project-euler/028/028-tests.factor | 4 ++++ extra/project-euler/029/029-tests.factor | 4 ++++ extra/project-euler/029/029.factor | 2 +- extra/project-euler/030/030-tests.factor | 4 ++++ extra/project-euler/030/030.factor | 2 +- extra/project-euler/031/031-tests.factor | 4 ++++ extra/project-euler/032/032-tests.factor | 5 +++++ extra/project-euler/032/032.factor | 6 +++--- extra/project-euler/033/033-tests.factor | 4 ++++ extra/project-euler/033/033.factor | 2 +- extra/project-euler/034/034-tests.factor | 4 ++++ extra/project-euler/034/034.factor | 2 +- extra/project-euler/035/035-tests.factor | 4 ++++ extra/project-euler/035/035.factor | 2 +- extra/project-euler/036/036-tests.factor | 4 ++++ extra/project-euler/036/036.factor | 2 +- extra/project-euler/037/037-tests.factor | 4 ++++ extra/project-euler/037/037.factor | 2 +- extra/project-euler/038/038-tests.factor | 4 ++++ extra/project-euler/038/038.factor | 2 +- extra/project-euler/039/039-tests.factor | 4 ++++ extra/project-euler/039/039.factor | 2 +- extra/project-euler/040/040-tests.factor | 4 ++++ extra/project-euler/040/040.factor | 2 +- extra/project-euler/041/041-tests.factor | 4 ++++ extra/project-euler/041/041.factor | 2 +- extra/project-euler/042/042-tests.factor | 5 +++++ extra/project-euler/042/042.factor | 4 ++-- extra/project-euler/043/043-tests.factor | 5 +++++ extra/project-euler/043/043.factor | 4 ++-- extra/project-euler/044/044-tests.factor | 4 ++++ extra/project-euler/044/044.factor | 2 +- extra/project-euler/045/045-tests.factor | 4 ++++ extra/project-euler/045/045.factor | 2 +- extra/project-euler/046/046-tests.factor | 4 ++++ extra/project-euler/046/046.factor | 2 +- extra/project-euler/047/047-tests.factor | 5 +++++ extra/project-euler/047/047.factor | 4 ++-- extra/project-euler/048/048-tests.factor | 4 ++++ extra/project-euler/052/052-tests.factor | 4 ++++ extra/project-euler/052/052.factor | 2 +- extra/project-euler/053/053-tests.factor | 4 ++++ extra/project-euler/053/053.factor | 2 +- extra/project-euler/055/055-tests.factor | 4 ++++ extra/project-euler/055/055.factor | 2 +- extra/project-euler/056/056-tests.factor | 4 ++++ extra/project-euler/056/056.factor | 2 +- extra/project-euler/059/059-tests.factor | 4 ++++ extra/project-euler/059/059.factor | 2 +- extra/project-euler/067/067-tests.factor | 5 +++++ extra/project-euler/067/067.factor | 4 ++-- extra/project-euler/075/075-tests.factor | 4 ++++ extra/project-euler/075/075.factor | 12 ++++++------ extra/project-euler/076/076-tests.factor | 4 ++++ extra/project-euler/079/079-tests.factor | 4 ++++ extra/project-euler/079/079.factor | 2 +- extra/project-euler/092/092-tests.factor | 4 ++++ extra/project-euler/097/097-tests.factor | 4 ++++ extra/project-euler/097/097.factor | 2 +- extra/project-euler/100/100-tests.factor | 4 ++++ extra/project-euler/100/100.factor | 6 +++--- extra/project-euler/116/116-tests.factor | 4 ++++ extra/project-euler/116/116.factor | 2 +- extra/project-euler/117/117-tests.factor | 4 ++++ extra/project-euler/117/117.factor | 2 +- extra/project-euler/134/134-tests.factor | 4 ++++ extra/project-euler/134/134.factor | 2 +- extra/project-euler/148/148-tests.factor | 4 ++++ extra/project-euler/148/148.factor | 2 +- extra/project-euler/150/150-tests.factor | 4 ++++ extra/project-euler/150/150.factor | 2 +- extra/project-euler/164/164-tests.factor | 4 ++++ extra/project-euler/164/164.factor | 2 +- extra/project-euler/169/169-tests.factor | 4 ++++ extra/project-euler/169/169.factor | 4 ++-- extra/project-euler/173/173-tests.factor | 4 ++++ extra/project-euler/173/173.factor | 2 +- extra/project-euler/175/175-tests.factor | 4 ++++ extra/project-euler/175/175.factor | 2 +- extra/project-euler/186/186-tests.factor | 4 ++++ extra/project-euler/186/186.factor | 5 ++--- extra/project-euler/190/190-tests.factor | 4 ++++ extra/project-euler/190/190.factor | 2 +- 115 files changed, 340 insertions(+), 73 deletions(-) create mode 100644 extra/project-euler/008/008-tests.factor create mode 100644 extra/project-euler/009/009-tests.factor create mode 100644 extra/project-euler/010/010-tests.factor create mode 100644 extra/project-euler/011/011-tests.factor create mode 100644 extra/project-euler/012/012-tests.factor create mode 100644 extra/project-euler/013/013-tests.factor create mode 100644 extra/project-euler/014/014-tests.factor create mode 100644 extra/project-euler/015/015-tests.factor create mode 100644 extra/project-euler/016/016-tests.factor create mode 100644 extra/project-euler/017/017-tests.factor create mode 100644 extra/project-euler/018/018-tests.factor create mode 100644 extra/project-euler/019/019-tests.factor create mode 100644 extra/project-euler/020/020-tests.factor create mode 100644 extra/project-euler/021/021-tests.factor create mode 100644 extra/project-euler/022/022-tests.factor create mode 100644 extra/project-euler/023/023-tests.factor create mode 100644 extra/project-euler/024/024-tests.factor create mode 100644 extra/project-euler/025/025-tests.factor create mode 100644 extra/project-euler/026/026-tests.factor create mode 100644 extra/project-euler/027/027-tests.factor create mode 100644 extra/project-euler/028/028-tests.factor create mode 100644 extra/project-euler/029/029-tests.factor create mode 100644 extra/project-euler/030/030-tests.factor create mode 100644 extra/project-euler/031/031-tests.factor create mode 100644 extra/project-euler/032/032-tests.factor create mode 100644 extra/project-euler/033/033-tests.factor create mode 100644 extra/project-euler/034/034-tests.factor create mode 100644 extra/project-euler/035/035-tests.factor create mode 100644 extra/project-euler/036/036-tests.factor create mode 100644 extra/project-euler/037/037-tests.factor create mode 100644 extra/project-euler/038/038-tests.factor create mode 100644 extra/project-euler/039/039-tests.factor create mode 100644 extra/project-euler/040/040-tests.factor create mode 100644 extra/project-euler/041/041-tests.factor create mode 100644 extra/project-euler/042/042-tests.factor create mode 100644 extra/project-euler/043/043-tests.factor create mode 100644 extra/project-euler/044/044-tests.factor create mode 100644 extra/project-euler/045/045-tests.factor create mode 100644 extra/project-euler/046/046-tests.factor create mode 100644 extra/project-euler/047/047-tests.factor create mode 100644 extra/project-euler/048/048-tests.factor create mode 100644 extra/project-euler/052/052-tests.factor create mode 100644 extra/project-euler/053/053-tests.factor create mode 100644 extra/project-euler/055/055-tests.factor create mode 100644 extra/project-euler/056/056-tests.factor create mode 100644 extra/project-euler/059/059-tests.factor create mode 100644 extra/project-euler/067/067-tests.factor create mode 100644 extra/project-euler/075/075-tests.factor create mode 100644 extra/project-euler/076/076-tests.factor create mode 100644 extra/project-euler/079/079-tests.factor create mode 100644 extra/project-euler/092/092-tests.factor create mode 100644 extra/project-euler/097/097-tests.factor create mode 100644 extra/project-euler/100/100-tests.factor create mode 100644 extra/project-euler/116/116-tests.factor create mode 100644 extra/project-euler/117/117-tests.factor create mode 100644 extra/project-euler/134/134-tests.factor create mode 100644 extra/project-euler/148/148-tests.factor create mode 100644 extra/project-euler/150/150-tests.factor create mode 100644 extra/project-euler/164/164-tests.factor create mode 100644 extra/project-euler/169/169-tests.factor create mode 100644 extra/project-euler/173/173-tests.factor create mode 100644 extra/project-euler/175/175-tests.factor create mode 100644 extra/project-euler/186/186-tests.factor create mode 100644 extra/project-euler/190/190-tests.factor diff --git a/extra/project-euler/008/008-tests.factor b/extra/project-euler/008/008-tests.factor new file mode 100644 index 0000000000..15fd9f4648 --- /dev/null +++ b/extra/project-euler/008/008-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.008 tools.test ; +IN: project-euler.008.tests + +[ 40824 ] [ euler008 ] unit-test diff --git a/extra/project-euler/009/009-tests.factor b/extra/project-euler/009/009-tests.factor new file mode 100644 index 0000000000..20be369818 --- /dev/null +++ b/extra/project-euler/009/009-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.009 tools.test ; +IN: project-euler.009.tests + +[ 31875000 ] [ euler009 ] unit-test diff --git a/extra/project-euler/010/010-tests.factor b/extra/project-euler/010/010-tests.factor new file mode 100644 index 0000000000..b110ce8824 --- /dev/null +++ b/extra/project-euler/010/010-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.010 tools.test ; +IN: project-euler.010.tests + +[ 142913828922 ] [ euler010 ] unit-test diff --git a/extra/project-euler/010/010.factor b/extra/project-euler/010/010.factor index 172bb9d290..c8bbe3d72e 100644 --- a/extra/project-euler/010/010.factor +++ b/extra/project-euler/010/010.factor @@ -10,16 +10,19 @@ IN: project-euler.010 ! The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. -! Find the sum of all the primes below one million. +! Find the sum of all the primes below two million. ! SOLUTION ! -------- : euler010 ( -- answer ) - 1000000 primes-upto sum ; + 2000000 primes-upto sum ; -! [ euler010 ] 100 ave-time -! 14 ms run / 0 ms GC ave time - 100 trials +! [ euler010 ] time +! 266425 ms run / 10001 ms GC time + +! TODO: this takes well over one minute now that they changed the problem to +! two million instead of one. the primes vocab could use some improvements MAIN: euler010 diff --git a/extra/project-euler/011/011-tests.factor b/extra/project-euler/011/011-tests.factor new file mode 100644 index 0000000000..5c48320f56 --- /dev/null +++ b/extra/project-euler/011/011-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.011 tools.test ; +IN: project-euler.011.tests + +[ 70600674 ] [ euler011 ] unit-test diff --git a/extra/project-euler/012/012-tests.factor b/extra/project-euler/012/012-tests.factor new file mode 100644 index 0000000000..c2d9730f05 --- /dev/null +++ b/extra/project-euler/012/012-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.012 tools.test ; +IN: project-euler.012.tests + +[ 76576500 ] [ euler012 ] unit-test diff --git a/extra/project-euler/012/012.factor b/extra/project-euler/012/012.factor index 583bad8f72..b25bfc90f1 100644 --- a/extra/project-euler/012/012.factor +++ b/extra/project-euler/012/012.factor @@ -37,6 +37,6 @@ IN: project-euler.012 8 [ dup nth-triangle tau* 500 < ] [ 1+ ] [ ] while nth-triangle ; ! [ euler012 ] 10 ave-time -! 5413 ms run / 1 ms GC ave time - 10 trials +! 6573 ms ave run time - 346.27 SD (10 trials) MAIN: euler012 diff --git a/extra/project-euler/013/013-tests.factor b/extra/project-euler/013/013-tests.factor new file mode 100644 index 0000000000..3d9f88d84e --- /dev/null +++ b/extra/project-euler/013/013-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.013 tools.test ; +IN: project-euler.013.tests + +[ 5537376230 ] [ euler013 ] unit-test diff --git a/extra/project-euler/013/013.factor b/extra/project-euler/013/013.factor index 907029cfb2..857bd62cc4 100644 --- a/extra/project-euler/013/013.factor +++ b/extra/project-euler/013/013.factor @@ -228,6 +228,6 @@ PRIVATE> source-013 sum number>string 10 head string>number ; ! [ euler013 ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.31 SD (100 trials) MAIN: euler013 diff --git a/extra/project-euler/014/014-tests.factor b/extra/project-euler/014/014-tests.factor new file mode 100644 index 0000000000..b423c90323 --- /dev/null +++ b/extra/project-euler/014/014-tests.factor @@ -0,0 +1,5 @@ +USING: project-euler.014 tools.test ; +IN: project-euler.014.tests + +[ 837799 ] [ euler014 ] unit-test +[ 837799 ] [ euler014a ] unit-test diff --git a/extra/project-euler/015/015-tests.factor b/extra/project-euler/015/015-tests.factor new file mode 100644 index 0000000000..9c86421889 --- /dev/null +++ b/extra/project-euler/015/015-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.015 tools.test ; +IN: project-euler.015.tests + +[ 137846528820 ] [ euler015 ] unit-test diff --git a/extra/project-euler/015/015.factor b/extra/project-euler/015/015.factor index 305426902b..fb720c7e7c 100644 --- a/extra/project-euler/015/015.factor +++ b/extra/project-euler/015/015.factor @@ -28,6 +28,6 @@ PRIVATE> 20 grid-paths ; ! [ euler015 ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.2 SD (100 trials) MAIN: euler015 diff --git a/extra/project-euler/016/016-tests.factor b/extra/project-euler/016/016-tests.factor new file mode 100644 index 0000000000..e75a114e68 --- /dev/null +++ b/extra/project-euler/016/016-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.016 tools.test ; +IN: project-euler.016.tests + +[ 1366 ] [ euler016 ] unit-test diff --git a/extra/project-euler/017/017-tests.factor b/extra/project-euler/017/017-tests.factor new file mode 100644 index 0000000000..3c2b2d5487 --- /dev/null +++ b/extra/project-euler/017/017-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.017 tools.test ; +IN: project-euler.017.tests + +[ 21124 ] [ euler017 ] unit-test diff --git a/extra/project-euler/018/018-tests.factor b/extra/project-euler/018/018-tests.factor new file mode 100644 index 0000000000..1d4d65079e --- /dev/null +++ b/extra/project-euler/018/018-tests.factor @@ -0,0 +1,5 @@ +USING: project-euler.018 tools.test ; +IN: project-euler.018.tests + +[ 1074 ] [ euler018 ] unit-test +[ 1074 ] [ euler018a ] unit-test diff --git a/extra/project-euler/018/018.factor b/extra/project-euler/018/018.factor index eb2df5e0da..21831b90d4 100644 --- a/extra/project-euler/018/018.factor +++ b/extra/project-euler/018/018.factor @@ -74,7 +74,7 @@ PRIVATE> source-018 propagate-all first first ; ! [ euler018 ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.29 SD (100 trials) ! ALTERNATE SOLUTIONS @@ -84,6 +84,6 @@ PRIVATE> source-018 max-path ; ! [ euler018a ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.39 SD (100 trials) MAIN: euler018a diff --git a/extra/project-euler/019/019-tests.factor b/extra/project-euler/019/019-tests.factor new file mode 100644 index 0000000000..543c01b06e --- /dev/null +++ b/extra/project-euler/019/019-tests.factor @@ -0,0 +1,5 @@ +USING: project-euler.019 tools.test ; +IN: project-euler.019.tests + +[ 171 ] [ euler019 ] unit-test +[ 171 ] [ euler019a ] unit-test diff --git a/extra/project-euler/019/019.factor b/extra/project-euler/019/019.factor index 9482b337bb..62e2e066ff 100644 --- a/extra/project-euler/019/019.factor +++ b/extra/project-euler/019/019.factor @@ -36,7 +36,7 @@ IN: project-euler.019 ] map concat [ zero? ] count ; ! [ euler019 ] 100 ave-time -! 1 ms run / 0 ms GC ave time - 100 trials +! 1 ms ave run time - 0.51 SD (100 trials) ! ALTERNATE SOLUTIONS @@ -61,6 +61,6 @@ PRIVATE> end-date start-date first-days [ zero? ] count ; ! [ euler019a ] 100 ave-time -! 131 ms run / 3 ms GC ave time - 100 trials +! 17 ms ave run time - 2.13 SD (100 trials) MAIN: euler019 diff --git a/extra/project-euler/020/020-tests.factor b/extra/project-euler/020/020-tests.factor new file mode 100644 index 0000000000..2d9175bb18 --- /dev/null +++ b/extra/project-euler/020/020-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.020 tools.test ; +IN: project-euler.020.tests + +[ 648 ] [ euler020 ] unit-test diff --git a/extra/project-euler/021/021-tests.factor b/extra/project-euler/021/021-tests.factor new file mode 100644 index 0000000000..f20ae562c2 --- /dev/null +++ b/extra/project-euler/021/021-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.021 tools.test ; +IN: project-euler.021.tests + +[ 31626 ] [ euler021 ] unit-test diff --git a/extra/project-euler/021/021.factor b/extra/project-euler/021/021.factor index af6bb3270b..2e2f6a6453 100644 --- a/extra/project-euler/021/021.factor +++ b/extra/project-euler/021/021.factor @@ -33,6 +33,6 @@ IN: project-euler.021 10000 [1,b] [ dup amicable? [ drop 0 ] unless ] sigma ; ! [ euler021 ] 100 ave-time -! 328 ms run / 10 ms GC ave time - 100 trials +! 335 ms ave run time - 18.63 SD (100 trials) MAIN: euler021 diff --git a/extra/project-euler/022/022-tests.factor b/extra/project-euler/022/022-tests.factor new file mode 100644 index 0000000000..bcd5c18166 --- /dev/null +++ b/extra/project-euler/022/022-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.022 tools.test ; +IN: project-euler.022.tests + +[ 871198282 ] [ euler022 ] unit-test diff --git a/extra/project-euler/022/022.factor b/extra/project-euler/022/022.factor index a508ddea6c..a12838406a 100644 --- a/extra/project-euler/022/022.factor +++ b/extra/project-euler/022/022.factor @@ -40,6 +40,6 @@ PRIVATE> source-022 natural-sort name-scores sum ; ! [ euler022 ] 100 ave-time -! 123 ms run / 4 ms GC ave time - 100 trials +! 74 ms ave run time - 5.13 SD (100 trials) MAIN: euler022 diff --git a/extra/project-euler/023/023-tests.factor b/extra/project-euler/023/023-tests.factor new file mode 100644 index 0000000000..bba4173147 --- /dev/null +++ b/extra/project-euler/023/023-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.023 tools.test ; +IN: project-euler.023.tests + +[ 4179871 ] [ euler023 ] unit-test diff --git a/extra/project-euler/024/024-tests.factor b/extra/project-euler/024/024-tests.factor new file mode 100644 index 0000000000..fe722e587e --- /dev/null +++ b/extra/project-euler/024/024-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.024 tools.test ; +IN: project-euler.024.tests + +[ 2783915460 ] [ euler024 ] unit-test diff --git a/extra/project-euler/024/024.factor b/extra/project-euler/024/024.factor index 0cc0c39e07..c10ce418c4 100755 --- a/extra/project-euler/024/024.factor +++ b/extra/project-euler/024/024.factor @@ -26,6 +26,6 @@ IN: project-euler.024 999999 10 permutation 10 digits>integer ; ! [ euler024 ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.27 SD (100 trials) MAIN: euler024 diff --git a/extra/project-euler/025/025-tests.factor b/extra/project-euler/025/025-tests.factor new file mode 100644 index 0000000000..0de6820de9 --- /dev/null +++ b/extra/project-euler/025/025-tests.factor @@ -0,0 +1,5 @@ +USING: project-euler.025 tools.test ; +IN: project-euler.025.tests + +[ 4782 ] [ euler025 ] unit-test +[ 4782 ] [ euler025a ] unit-test diff --git a/extra/project-euler/025/025.factor b/extra/project-euler/025/025.factor index 6d15a9f6ec..a2934c23c7 100644 --- a/extra/project-euler/025/025.factor +++ b/extra/project-euler/025/025.factor @@ -55,7 +55,7 @@ PRIVATE> 1000 digit-fib ; ! [ euler025 ] 10 ave-time -! 5237 ms run / 72 ms GC ave time - 10 trials +! 5345 ms ave run time - 105.91 SD (10 trials) ! ALTERNATE SOLUTIONS @@ -76,6 +76,6 @@ PRIVATE> 1000 digit-fib* ; ! [ euler025a ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.17 SD (100 trials) MAIN: euler025a diff --git a/extra/project-euler/026/026-tests.factor b/extra/project-euler/026/026-tests.factor new file mode 100644 index 0000000000..1b9b953c26 --- /dev/null +++ b/extra/project-euler/026/026-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.026 tools.test ; +IN: project-euler.026.tests + +[ 983 ] [ euler026 ] unit-test diff --git a/extra/project-euler/026/026.factor b/extra/project-euler/026/026.factor index 8cbf20d0bf..cf30d0ee42 100644 --- a/extra/project-euler/026/026.factor +++ b/extra/project-euler/026/026.factor @@ -66,6 +66,6 @@ PRIVATE> source-026 max-period drop denominator ; ! [ euler026 ] 100 ave-time -! 724 ms run / 7 ms GC ave time - 100 trials +! 290 ms ave run time - 19.2 SD (100 trials) MAIN: euler026 diff --git a/extra/project-euler/027/027-tests.factor b/extra/project-euler/027/027-tests.factor new file mode 100644 index 0000000000..614d8a547d --- /dev/null +++ b/extra/project-euler/027/027-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.027 tools.test ; +IN: project-euler.027.tests + +[ -59231 ] [ euler027 ] unit-test diff --git a/extra/project-euler/027/027.factor b/extra/project-euler/027/027.factor index 7680112af7..5bf753074e 100644 --- a/extra/project-euler/027/027.factor +++ b/extra/project-euler/027/027.factor @@ -68,7 +68,7 @@ PRIVATE> source-027 max-consecutive drop product ; ! [ euler027 ] 100 ave-time -! 687 ms run / 23 ms GC ave time - 100 trials +! 111 ms ave run time - 6.07 SD (100 trials) ! TODO: generalize max-consecutive/max-product (from #26) into a new word diff --git a/extra/project-euler/028/028-tests.factor b/extra/project-euler/028/028-tests.factor new file mode 100644 index 0000000000..fea5ef1c80 --- /dev/null +++ b/extra/project-euler/028/028-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.028 tools.test ; +IN: project-euler.028.tests + +[ 669171001 ] [ euler028 ] unit-test diff --git a/extra/project-euler/029/029-tests.factor b/extra/project-euler/029/029-tests.factor new file mode 100644 index 0000000000..5fd064fb0b --- /dev/null +++ b/extra/project-euler/029/029-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.029 tools.test ; +IN: project-euler.029.tests + +[ 9183 ] [ euler029 ] unit-test diff --git a/extra/project-euler/029/029.factor b/extra/project-euler/029/029.factor index 9cfe0aacff..2586e6182a 100644 --- a/extra/project-euler/029/029.factor +++ b/extra/project-euler/029/029.factor @@ -32,6 +32,6 @@ IN: project-euler.029 2 100 [a,b] dup cartesian-product [ first2 ^ ] map prune length ; ! [ euler029 ] 100 ave-time -! 951 ms run / 12 ms GC ave time - 100 trials +! 704 ms ave run time - 28.07 SD (100 trials) MAIN: euler029 diff --git a/extra/project-euler/030/030-tests.factor b/extra/project-euler/030/030-tests.factor new file mode 100644 index 0000000000..3b0d03025b --- /dev/null +++ b/extra/project-euler/030/030-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.030 tools.test ; +IN: project-euler.030.tests + +[ 443839 ] [ euler030 ] unit-test diff --git a/extra/project-euler/030/030.factor b/extra/project-euler/030/030.factor index 250494c0dc..63693f96d8 100644 --- a/extra/project-euler/030/030.factor +++ b/extra/project-euler/030/030.factor @@ -41,6 +41,6 @@ PRIVATE> 325537 [ dup sum-fifth-powers = ] filter sum 1- ; ! [ euler030 ] 100 ave-time -! 2537 ms run / 125 ms GC ave time - 100 trials +! 1700 ms ave run time - 64.84 SD (100 trials) MAIN: euler030 diff --git a/extra/project-euler/031/031-tests.factor b/extra/project-euler/031/031-tests.factor new file mode 100644 index 0000000000..5e81717368 --- /dev/null +++ b/extra/project-euler/031/031-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.031 tools.test ; +IN: project-euler.031.tests + +[ 73682 ] [ euler031 ] unit-test diff --git a/extra/project-euler/032/032-tests.factor b/extra/project-euler/032/032-tests.factor new file mode 100644 index 0000000000..039c31df1b --- /dev/null +++ b/extra/project-euler/032/032-tests.factor @@ -0,0 +1,5 @@ +USING: project-euler.032 tools.test ; +IN: project-euler.032.tests + +[ 45228 ] [ euler032 ] unit-test +[ 45228 ] [ euler032a ] unit-test diff --git a/extra/project-euler/032/032.factor b/extra/project-euler/032/032.factor index 02c1d44e43..07c643659c 100755 --- a/extra/project-euler/032/032.factor +++ b/extra/project-euler/032/032.factor @@ -49,7 +49,7 @@ PRIVATE> source-032 [ valid? ] filter products prune sum ; ! [ euler032 ] 10 ave-time -! 23922 ms run / 1505 ms GC ave time - 10 trials +! 16361 ms ave run time - 417.8 SD (10 trials) ! ALTERNATE SOLUTIONS @@ -72,7 +72,7 @@ PRIVATE> : euler032a ( -- answer ) source-032a [ mmp ] map [ pandigital? ] filter products prune sum ; -! [ euler032a ] 100 ave-time -! 5978 ms run / 327 ms GC ave time - 100 trials +! [ euler032a ] 10 ave-time +! 2624 ms ave run time - 131.91 SD (10 trials) MAIN: euler032a diff --git a/extra/project-euler/033/033-tests.factor b/extra/project-euler/033/033-tests.factor new file mode 100644 index 0000000000..e57d623692 --- /dev/null +++ b/extra/project-euler/033/033-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.033 tools.test ; +IN: project-euler.033.tests + +[ 100 ] [ euler033 ] unit-test diff --git a/extra/project-euler/033/033.factor b/extra/project-euler/033/033.factor index 8cb0dc45c3..d0c79c220a 100644 --- a/extra/project-euler/033/033.factor +++ b/extra/project-euler/033/033.factor @@ -50,6 +50,6 @@ PRIVATE> source-033 curious-fractions product denominator ; ! [ euler033 ] 100 ave-time -! 5 ms run / 0 ms GC ave time - 100 trials +! 7 ms ave run time - 1.31 SD (100 trials) MAIN: euler033 diff --git a/extra/project-euler/034/034-tests.factor b/extra/project-euler/034/034-tests.factor new file mode 100644 index 0000000000..56d2bbb517 --- /dev/null +++ b/extra/project-euler/034/034-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.034 tools.test ; +IN: project-euler.034.tests + +[ 40730 ] [ euler034 ] unit-test diff --git a/extra/project-euler/034/034.factor b/extra/project-euler/034/034.factor index 28c4fa5dc7..11b7efa8b5 100644 --- a/extra/project-euler/034/034.factor +++ b/extra/project-euler/034/034.factor @@ -42,6 +42,6 @@ PRIVATE> 3 2000000 [a,b] [ factorion? ] filter sum ; ! [ euler034 ] 10 ave-time -! 15089 ms run / 725 ms GC ave time - 10 trials +! 5506 ms ave run time - 144.0 SD (10 trials) MAIN: euler034 diff --git a/extra/project-euler/035/035-tests.factor b/extra/project-euler/035/035-tests.factor new file mode 100644 index 0000000000..0ede690e17 --- /dev/null +++ b/extra/project-euler/035/035-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.035 tools.test ; +IN: project-euler.035.tests + +[ 55 ] [ euler035 ] unit-test diff --git a/extra/project-euler/035/035.factor b/extra/project-euler/035/035.factor index 8e8b654d28..517e5211d2 100755 --- a/extra/project-euler/035/035.factor +++ b/extra/project-euler/035/035.factor @@ -53,7 +53,7 @@ PRIVATE> source-035 [ possible? ] filter [ circular? ] count ; ! [ euler035 ] 100 ave-time -! 904 ms run / 86 ms GC ave time - 100 trials +! 538 ms ave run time - 17.16 SD (100 trials) ! TODO: try using bit arrays or other methods outlined here: ! http://home.comcast.net/~babdulbaki/Circular_Primes.html diff --git a/extra/project-euler/036/036-tests.factor b/extra/project-euler/036/036-tests.factor new file mode 100644 index 0000000000..07c2d76915 --- /dev/null +++ b/extra/project-euler/036/036-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.036 tools.test ; +IN: project-euler.036.tests + +[ 872187 ] [ euler036 ] unit-test diff --git a/extra/project-euler/036/036.factor b/extra/project-euler/036/036.factor index fc9df9a8fe..02d9372a8b 100644 --- a/extra/project-euler/036/036.factor +++ b/extra/project-euler/036/036.factor @@ -35,6 +35,6 @@ PRIVATE> 1 1000000 2 [ both-bases? ] filter sum ; ! [ euler036 ] 100 ave-time -! 3891 ms run / 173 ms GC ave time - 100 trials +! 1703 ms ave run time - 96.6 SD (100 trials) MAIN: euler036 diff --git a/extra/project-euler/037/037-tests.factor b/extra/project-euler/037/037-tests.factor new file mode 100644 index 0000000000..b661e5be08 --- /dev/null +++ b/extra/project-euler/037/037-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.037 tools.test ; +IN: project-euler.037.tests + +[ 748317 ] [ euler037 ] unit-test diff --git a/extra/project-euler/037/037.factor b/extra/project-euler/037/037.factor index a5bc0581e6..4562c4588f 100755 --- a/extra/project-euler/037/037.factor +++ b/extra/project-euler/037/037.factor @@ -47,6 +47,6 @@ PRIVATE> 23 1000000 primes-between [ r-trunc? ] filter [ l-trunc? ] filter sum ; ! [ euler037 ] 100 ave-time -! 768 ms run / 9 ms GC ave time - 100 trials +! 130 ms ave run time - 6.27 SD (100 trials) MAIN: euler037 diff --git a/extra/project-euler/038/038-tests.factor b/extra/project-euler/038/038-tests.factor new file mode 100644 index 0000000000..0bad869943 --- /dev/null +++ b/extra/project-euler/038/038-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.038 tools.test ; +IN: project-euler.038.tests + +[ 932718654 ] [ euler038 ] unit-test diff --git a/extra/project-euler/038/038.factor b/extra/project-euler/038/038.factor index 05bab5fc36..2df993b341 100755 --- a/extra/project-euler/038/038.factor +++ b/extra/project-euler/038/038.factor @@ -51,6 +51,6 @@ PRIVATE> 9123 9876 [a,b] [ concat-product ] map [ pandigital? ] filter supremum ; ! [ euler038 ] 100 ave-time -! 37 ms run / 1 ms GC ave time - 100 trials +! 11 ms ave run time - 1.5 SD (100 trials) MAIN: euler038 diff --git a/extra/project-euler/039/039-tests.factor b/extra/project-euler/039/039-tests.factor new file mode 100644 index 0000000000..742550a6cf --- /dev/null +++ b/extra/project-euler/039/039-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.039 tools.test ; +IN: project-euler.039.tests + +[ 840 ] [ euler039 ] unit-test diff --git a/extra/project-euler/039/039.factor b/extra/project-euler/039/039.factor index d0caa6d0e4..6b56015667 100755 --- a/extra/project-euler/039/039.factor +++ b/extra/project-euler/039/039.factor @@ -60,6 +60,6 @@ PRIVATE> ] with-scope ; ! [ euler039 ] 100 ave-time -! 2 ms run / 0 ms GC ave time - 100 trials +! 1 ms ave run time - 0.37 SD (100 trials) MAIN: euler039 diff --git a/extra/project-euler/040/040-tests.factor b/extra/project-euler/040/040-tests.factor new file mode 100644 index 0000000000..5934e65ed6 --- /dev/null +++ b/extra/project-euler/040/040-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.040 tools.test ; +IN: project-euler.040.tests + +[ 210 ] [ euler040 ] unit-test diff --git a/extra/project-euler/040/040.factor b/extra/project-euler/040/040.factor index e2df1df2c9..6b8a3f267a 100755 --- a/extra/project-euler/040/040.factor +++ b/extra/project-euler/040/040.factor @@ -46,6 +46,6 @@ PRIVATE> [ swap nth-integer ] with map product ; ! [ euler040 ] 100 ave-time -! 1002 ms run / 43 ms GC ave time - 100 trials +! 444 ms ave run time - 23.64 SD (100 trials) MAIN: euler040 diff --git a/extra/project-euler/041/041-tests.factor b/extra/project-euler/041/041-tests.factor new file mode 100644 index 0000000000..5226860bd0 --- /dev/null +++ b/extra/project-euler/041/041-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.041 tools.test ; +IN: project-euler.041.tests + +[ 7652413 ] [ euler041 ] unit-test diff --git a/extra/project-euler/041/041.factor b/extra/project-euler/041/041.factor index 14084cc01d..d6d428a11f 100644 --- a/extra/project-euler/041/041.factor +++ b/extra/project-euler/041/041.factor @@ -35,6 +35,6 @@ IN: project-euler.041 [ 10 digits>integer ] map [ prime? ] find nip ; ! [ euler041 ] 100 ave-time -! 107 ms run / 7 ms GC ave time - 100 trials +! 64 ms ave run time - 4.22 SD (100 trials) MAIN: euler041 diff --git a/extra/project-euler/042/042-tests.factor b/extra/project-euler/042/042-tests.factor new file mode 100644 index 0000000000..ef8f06f9e0 --- /dev/null +++ b/extra/project-euler/042/042-tests.factor @@ -0,0 +1,5 @@ +USING: project-euler.042 tools.test ; +IN: project-euler.042.tests + +[ 162 ] [ euler042 ] unit-test +[ 162 ] [ euler042a ] unit-test diff --git a/extra/project-euler/042/042.factor b/extra/project-euler/042/042.factor index 009570d92c..c8236db118 100644 --- a/extra/project-euler/042/042.factor +++ b/extra/project-euler/042/042.factor @@ -50,7 +50,7 @@ PRIVATE> triangle-upto [ member? ] curry count ; ! [ euler042 ] 100 ave-time -! 27 ms run / 1 ms GC ave time - 100 trials +! 19 ms ave run time - 1.97 SD (100 trials) ! ALTERNATE SOLUTIONS @@ -69,6 +69,6 @@ PRIVATE> source-042 [ alpha-value ] map [ triangle? ] count ; ! [ euler042a ] 100 ave-time -! 25 ms run / 1 ms GC ave time - 100 trials +! 21 ms ave run time - 2.2 SD (100 trials) MAIN: euler042a diff --git a/extra/project-euler/043/043-tests.factor b/extra/project-euler/043/043-tests.factor new file mode 100644 index 0000000000..4c96721db2 --- /dev/null +++ b/extra/project-euler/043/043-tests.factor @@ -0,0 +1,5 @@ +USING: project-euler.043 tools.test ; +IN: project-euler.043.tests + +[ 16695334890 ] [ euler043 ] unit-test +[ 16695334890 ] [ euler043a ] unit-test diff --git a/extra/project-euler/043/043.factor b/extra/project-euler/043/043.factor index 9eb78e5153..28dc0b8bd6 100644 --- a/extra/project-euler/043/043.factor +++ b/extra/project-euler/043/043.factor @@ -56,7 +56,7 @@ PRIVATE> [ interesting? ] filter [ 10 digits>integer ] map sum ; ! [ euler043 ] time -! 125196 ms run / 19548 ms GC time +! 104526 ms run / 42735 ms GC time ! ALTERNATE SOLUTIONS @@ -92,6 +92,6 @@ PRIVATE> interesting-pandigitals [ 10 digits>integer ] sigma ; ! [ euler043a ] 100 ave-time -! 12 ms ave run time - 2.32 SD (100 trials) +! 10 ms ave run time - 1.37 SD (100 trials) MAIN: euler043a diff --git a/extra/project-euler/044/044-tests.factor b/extra/project-euler/044/044-tests.factor new file mode 100644 index 0000000000..df93dd6a1b --- /dev/null +++ b/extra/project-euler/044/044-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.044 tools.test ; +IN: project-euler.044.tests + +[ 5482660 ] [ euler044 ] unit-test diff --git a/extra/project-euler/044/044.factor b/extra/project-euler/044/044.factor index 0af3a3167e..e7b1959023 100644 --- a/extra/project-euler/044/044.factor +++ b/extra/project-euler/044/044.factor @@ -40,7 +40,7 @@ PRIVATE> [ first2 sum-and-diff? ] filter [ first2 - abs ] map infimum ; ! [ euler044 ] 10 ave-time -! 5727 ms ave run time - 1102.38 SD (10 trials) +! 4996 ms ave run time - 87.46 SD (10 trials) ! TODO: this solution is ugly and not very efficient...find a better algorithm diff --git a/extra/project-euler/045/045-tests.factor b/extra/project-euler/045/045-tests.factor new file mode 100644 index 0000000000..4beb8f8e3c --- /dev/null +++ b/extra/project-euler/045/045-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.045 tools.test ; +IN: project-euler.045.tests + +[ 1533776805 ] [ euler045 ] unit-test diff --git a/extra/project-euler/045/045.factor b/extra/project-euler/045/045.factor index d9cf8c99f8..ca5cd83f41 100644 --- a/extra/project-euler/045/045.factor +++ b/extra/project-euler/045/045.factor @@ -44,6 +44,6 @@ PRIVATE> 143 next-solution ; ! [ euler045 ] 100 ave-time -! 18 ms run / 1 ms GC ave time - 100 trials +! 12 ms ave run time - 1.71 SD (100 trials) MAIN: euler045 diff --git a/extra/project-euler/046/046-tests.factor b/extra/project-euler/046/046-tests.factor new file mode 100644 index 0000000000..ecfff9dd77 --- /dev/null +++ b/extra/project-euler/046/046-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.046 tools.test ; +IN: project-euler.046.tests + +[ 5777 ] [ euler046 ] unit-test diff --git a/extra/project-euler/046/046.factor b/extra/project-euler/046/046.factor index 1e7630c142..7f5ad9e0d8 100644 --- a/extra/project-euler/046/046.factor +++ b/extra/project-euler/046/046.factor @@ -47,6 +47,6 @@ PRIVATE> 9 disprove-conjecture ; ! [ euler046 ] 100 ave-time -! 150 ms run / 2 ms GC ave time - 100 trials +! 37 ms ave run time - 3.39 SD (100 trials) MAIN: euler046 diff --git a/extra/project-euler/047/047-tests.factor b/extra/project-euler/047/047-tests.factor new file mode 100644 index 0000000000..fb3c72f736 --- /dev/null +++ b/extra/project-euler/047/047-tests.factor @@ -0,0 +1,5 @@ +USING: project-euler.047 tools.test ; +IN: project-euler.047.tests + +[ 134043 ] [ euler047 ] unit-test +[ 134043 ] [ euler047a ] unit-test diff --git a/extra/project-euler/047/047.factor b/extra/project-euler/047/047.factor index 87a1387887..84041babb7 100644 --- a/extra/project-euler/047/047.factor +++ b/extra/project-euler/047/047.factor @@ -49,7 +49,7 @@ PRIVATE> 4 646 consecutive ; ! [ euler047 ] time -! 542708 ms run / 60548 ms GC time +! 344688 ms run / 20727 ms GC time ! ALTERNATE SOLUTIONS @@ -88,7 +88,7 @@ PRIVATE> 4 200000 consecutive-under ; ! [ euler047a ] 100 ave-time -! 503 ms run / 5 ms GC ave time - 100 trials +! 331 ms ave run time - 19.14 SD (100 trials) ! TODO: I don't like that you have to specify the upper bound, maybe try making ! this lazy so it could also short-circuit when it finds the answer? diff --git a/extra/project-euler/048/048-tests.factor b/extra/project-euler/048/048-tests.factor new file mode 100644 index 0000000000..172623ab05 --- /dev/null +++ b/extra/project-euler/048/048-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.048 tools.test ; +IN: project-euler.048.tests + +[ 9110846700 ] [ euler048 ] unit-test diff --git a/extra/project-euler/052/052-tests.factor b/extra/project-euler/052/052-tests.factor new file mode 100644 index 0000000000..be032c86a3 --- /dev/null +++ b/extra/project-euler/052/052-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.052 tools.test ; +IN: project-euler.052.tests + +[ 142857 ] [ euler052 ] unit-test diff --git a/extra/project-euler/052/052.factor b/extra/project-euler/052/052.factor index 3f562baa85..cfbb718200 100644 --- a/extra/project-euler/052/052.factor +++ b/extra/project-euler/052/052.factor @@ -46,6 +46,6 @@ PRIVATE> 6 123456 next-all-same ; ! [ euler052 ] 100 ave-time -! 403 ms run / 7 ms GC ave time - 100 trials +! 92 ms ave run time - 6.29 SD (100 trials) MAIN: euler052 diff --git a/extra/project-euler/053/053-tests.factor b/extra/project-euler/053/053-tests.factor new file mode 100644 index 0000000000..6c9ffaea97 --- /dev/null +++ b/extra/project-euler/053/053-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.053 tools.test ; +IN: project-euler.053.tests + +[ 4075 ] [ euler053 ] unit-test diff --git a/extra/project-euler/053/053.factor b/extra/project-euler/053/053.factor index b2a50e4ac7..d264bca4bf 100644 --- a/extra/project-euler/053/053.factor +++ b/extra/project-euler/053/053.factor @@ -30,6 +30,6 @@ IN: project-euler.053 23 100 [a,b] [ dup [ nCk 1000000 > ] with count ] sigma ; ! [ euler053 ] 100 ave-time -! 64 ms run / 2 ms GC ave time - 100 trials +! 52 ms ave run time - 4.44 SD (100 trials) MAIN: euler053 diff --git a/extra/project-euler/055/055-tests.factor b/extra/project-euler/055/055-tests.factor new file mode 100644 index 0000000000..ad23695da6 --- /dev/null +++ b/extra/project-euler/055/055-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.055 tools.test ; +IN: project-euler.055.tests + +[ 249 ] [ euler055 ] unit-test diff --git a/extra/project-euler/055/055.factor b/extra/project-euler/055/055.factor index bf1dd43b97..d07d0c8e31 100644 --- a/extra/project-euler/055/055.factor +++ b/extra/project-euler/055/055.factor @@ -64,6 +64,6 @@ PRIVATE> 10000 [ lychrel? ] count ; ! [ euler055 ] 100 ave-time -! 1370 ms run / 31 ms GC ave time - 100 trials +! 478 ms ave run time - 30.63 SD (100 trials) MAIN: euler055 diff --git a/extra/project-euler/056/056-tests.factor b/extra/project-euler/056/056-tests.factor new file mode 100644 index 0000000000..b1f37514d1 --- /dev/null +++ b/extra/project-euler/056/056-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.056 tools.test ; +IN: project-euler.056.tests + +[ 972 ] [ euler056 ] unit-test diff --git a/extra/project-euler/056/056.factor b/extra/project-euler/056/056.factor index 0efe32b254..34626b796d 100644 --- a/extra/project-euler/056/056.factor +++ b/extra/project-euler/056/056.factor @@ -26,6 +26,6 @@ IN: project-euler.056 [ first2 ^ number>digits sum ] map supremum ; ! [ euler056 ] 100 ave-time -! 33 ms run / 1 ms GC ave time - 100 trials +! 22 ms ave run time - 2.13 SD (100 trials) MAIN: euler056 diff --git a/extra/project-euler/059/059-tests.factor b/extra/project-euler/059/059-tests.factor new file mode 100644 index 0000000000..231c7339a3 --- /dev/null +++ b/extra/project-euler/059/059-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.059 tools.test ; +IN: project-euler.059.tests + +[ 107359 ] [ euler059 ] unit-test diff --git a/extra/project-euler/059/059.factor b/extra/project-euler/059/059.factor index e3ab9762d8..bbeeff1eec 100644 --- a/extra/project-euler/059/059.factor +++ b/extra/project-euler/059/059.factor @@ -87,6 +87,6 @@ PRIVATE> source-059 dup 3 crack-key decrypt sum ; ! [ euler059 ] 100 ave-time -! 13 ms run / 0 ms GC ave time - 100 trials +! 8 ms ave run time - 1.4 SD (100 trials) MAIN: euler059 diff --git a/extra/project-euler/067/067-tests.factor b/extra/project-euler/067/067-tests.factor new file mode 100644 index 0000000000..1e8940f91e --- /dev/null +++ b/extra/project-euler/067/067-tests.factor @@ -0,0 +1,5 @@ +USING: project-euler.067 tools.test ; +IN: project-euler.067.tests + +[ 7273 ] [ euler067 ] unit-test +[ 7273 ] [ euler067a ] unit-test diff --git a/extra/project-euler/067/067.factor b/extra/project-euler/067/067.factor index 3e16996e04..3f9d67091d 100644 --- a/extra/project-euler/067/067.factor +++ b/extra/project-euler/067/067.factor @@ -47,7 +47,7 @@ PRIVATE> source-067 propagate-all first first ; ! [ euler067 ] 100 ave-time -! 18 ms run / 0 ms GC time +! 20 ms ave run time - 2.12 SD (100 trials) ! ALTERNATE SOLUTIONS @@ -57,6 +57,6 @@ PRIVATE> source-067 max-path ; ! [ euler067a ] 100 ave-time -! 14 ms run / 0 ms GC ave time - 100 trials +! 21 ms ave run time - 2.65 SD (100 trials) MAIN: euler067a diff --git a/extra/project-euler/075/075-tests.factor b/extra/project-euler/075/075-tests.factor new file mode 100644 index 0000000000..8c69a99e1b --- /dev/null +++ b/extra/project-euler/075/075-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.075 tools.test ; +IN: project-euler.075.tests + +[ 214954 ] [ euler075 ] unit-test diff --git a/extra/project-euler/075/075.factor b/extra/project-euler/075/075.factor index 76f2a2a26e..2b5b931165 100755 --- a/extra/project-euler/075/075.factor +++ b/extra/project-euler/075/075.factor @@ -26,7 +26,7 @@ IN: project-euler.075 ! 120 cm: (30,40,50), (20,48,52), (24,45,51) -! Given that L is the length of the wire, for how many values of L ≤ 1,000,000 +! Given that L is the length of the wire, for how many values of L ≤ 2,000,000 ! can exactly one right angle triangle be formed? @@ -36,9 +36,9 @@ IN: project-euler.075 ! Algorithm adapted from http://mathworld.wolfram.com/PythagoreanTriple.html ! Identical implementation as problem #39 -! Basically, this makes an array of 1000000 zeros, recursively creates +! Basically, this makes an array of 2000000 zeros, recursively creates ! primitive triples using the three transforms and then increments the array at -! index [a+b+c] by one for each triple's sum AND its multiples under 1000000 +! index [a+b+c] by one for each triple's sum AND its multiples under 2000000 ! (to account for non-primitive triples). The answer is just the total number ! of indexes that are equal to one. @@ -69,10 +69,10 @@ PRIVATE> : euler075 ( -- answer ) [ - 1000000 count-perimeters p-count get [ 1 = ] count + 2000000 count-perimeters p-count get [ 1 = ] count ] with-scope ; -! [ euler075 ] 100 ave-time -! 1873 ms run / 123 ms GC ave time - 100 trials +! [ euler075 ] 10 ave-time +! 3341 ms ave run timen - 157.77 SD (10 trials) MAIN: euler075 diff --git a/extra/project-euler/076/076-tests.factor b/extra/project-euler/076/076-tests.factor new file mode 100644 index 0000000000..9d435b1f30 --- /dev/null +++ b/extra/project-euler/076/076-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.076 tools.test ; +IN: project-euler.076.tests + +[ 190569291 ] [ euler076 ] unit-test diff --git a/extra/project-euler/079/079-tests.factor b/extra/project-euler/079/079-tests.factor new file mode 100644 index 0000000000..d9f47cffb8 --- /dev/null +++ b/extra/project-euler/079/079-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.079 tools.test ; +IN: project-euler.079.tests + +[ 73162890 ] [ euler079 ] unit-test diff --git a/extra/project-euler/079/079.factor b/extra/project-euler/079/079.factor index 29b76c7ba4..ad75c43c42 100644 --- a/extra/project-euler/079/079.factor +++ b/extra/project-euler/079/079.factor @@ -58,7 +58,7 @@ PRIVATE> source-079 >edges topological-sort 10 digits>integer ; ! [ euler079 ] 100 ave-time -! 1 ms ave run time - 1.41 SD (100 trials) +! 1 ms ave run time - 0.46 SD (100 trials) ! TODO: prune and diff are relatively slow; topological sort could be ! cleaned up and generalized much better, but it works for this problem diff --git a/extra/project-euler/092/092-tests.factor b/extra/project-euler/092/092-tests.factor new file mode 100644 index 0000000000..0a89e18504 --- /dev/null +++ b/extra/project-euler/092/092-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.092 tools.test ; +IN: project-euler.092.tests + +[ 8581146 ] [ euler092 ] unit-test diff --git a/extra/project-euler/097/097-tests.factor b/extra/project-euler/097/097-tests.factor new file mode 100644 index 0000000000..3a484032ae --- /dev/null +++ b/extra/project-euler/097/097-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.097 tools.test ; +IN: project-euler.097.tests + +[ 8739992577 ] [ euler097 ] unit-test diff --git a/extra/project-euler/097/097.factor b/extra/project-euler/097/097.factor index 50e7af563d..6e6547a7e9 100644 --- a/extra/project-euler/097/097.factor +++ b/extra/project-euler/097/097.factor @@ -26,6 +26,6 @@ IN: project-euler.097 2 7830457 10 10 ^ ^mod 28433 * 10 10 ^ mod 1+ ; ! [ euler097 ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run timen - 0.22 SD (100 trials) MAIN: euler097 diff --git a/extra/project-euler/100/100-tests.factor b/extra/project-euler/100/100-tests.factor new file mode 100644 index 0000000000..bbe84eb86e --- /dev/null +++ b/extra/project-euler/100/100-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.100 tools.test ; +IN: project-euler.100.tests + +[ 756872327473 ] [ euler100 ] unit-test diff --git a/extra/project-euler/100/100.factor b/extra/project-euler/100/100.factor index fca1bf8af8..98dbba19fd 100644 --- a/extra/project-euler/100/100.factor +++ b/extra/project-euler/100/100.factor @@ -28,9 +28,9 @@ IN: project-euler.100 [ dup dup 1- * 2 * 10 24 ^ <= ] [ tuck 6 * swap - 2 - ] [ ] while nip ; -! TODO: solution is incredibly slow (>30 minutes) and needs generalization +! TODO: solution needs generalization -! [ euler100 ] time -! ? ms run time +! [ euler100 ] 100 ave-time +! 0 ms ave run time - 0.14 SD (100 trials) MAIN: euler100 diff --git a/extra/project-euler/116/116-tests.factor b/extra/project-euler/116/116-tests.factor new file mode 100644 index 0000000000..fae67f3d2d --- /dev/null +++ b/extra/project-euler/116/116-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.116 tools.test ; +IN: project-euler.116.tests + +[ 20492570929 ] [ euler116 ] unit-test diff --git a/extra/project-euler/116/116.factor b/extra/project-euler/116/116.factor index 0e3633dc9a..742fe9d625 100644 --- a/extra/project-euler/116/116.factor +++ b/extra/project-euler/116/116.factor @@ -55,6 +55,6 @@ PRIVATE> 50 (euler116) ; ! [ euler116 ] 100 ave-time -! 0 ms run time - 100 trials +! 0 ms ave run time - 0.34 SD (100 trials) MAIN: euler116 diff --git a/extra/project-euler/117/117-tests.factor b/extra/project-euler/117/117-tests.factor new file mode 100644 index 0000000000..ba677cf49d --- /dev/null +++ b/extra/project-euler/117/117-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.117 tools.test ; +IN: project-euler.117.tests + +[ 100808458960497 ] [ euler117 ] unit-test diff --git a/extra/project-euler/117/117.factor b/extra/project-euler/117/117.factor index cc5dea8f37..7174066227 100644 --- a/extra/project-euler/117/117.factor +++ b/extra/project-euler/117/117.factor @@ -42,6 +42,6 @@ PRIVATE> 50 (euler117) ; ! [ euler117 ] 100 ave-time -! 0 ms run time - 100 trials +! 0 ms ave run time - 0.29 SD (100 trials) MAIN: euler117 diff --git a/extra/project-euler/134/134-tests.factor b/extra/project-euler/134/134-tests.factor new file mode 100644 index 0000000000..63c25eaf58 --- /dev/null +++ b/extra/project-euler/134/134-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.134 tools.test ; +IN: project-euler.134.tests + +[ 18613426663617118 ] [ euler134 ] unit-test diff --git a/extra/project-euler/134/134.factor b/extra/project-euler/134/134.factor index 4e54a18f19..7bdf17ef68 100644 --- a/extra/project-euler/134/134.factor +++ b/extra/project-euler/134/134.factor @@ -43,6 +43,6 @@ PRIVATE> [ [ s + ] keep ] leach drop ; ! [ euler134 ] 10 ave-time -! 2430 ms run / 36 ms GC ave time - 10 trials +! 933 ms ave run timen - 19.58 SD (10 trials) MAIN: euler134 diff --git a/extra/project-euler/148/148-tests.factor b/extra/project-euler/148/148-tests.factor new file mode 100644 index 0000000000..66c8f6c45c --- /dev/null +++ b/extra/project-euler/148/148-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.148 tools.test ; +IN: project-euler.148.tests + +[ 2129970655314432 ] [ euler148 ] unit-test diff --git a/extra/project-euler/148/148.factor b/extra/project-euler/148/148.factor index 0509936e52..533874fa67 100644 --- a/extra/project-euler/148/148.factor +++ b/extra/project-euler/148/148.factor @@ -49,6 +49,6 @@ PRIVATE> 10 9 ^ (euler148) ; ! [ euler148 ] 100 ave-time -! 0 ms run time - 100 trials +! 0 ms ave run time - 0.17 SD (100 trials) MAIN: euler148 diff --git a/extra/project-euler/150/150-tests.factor b/extra/project-euler/150/150-tests.factor new file mode 100644 index 0000000000..19fb31b3eb --- /dev/null +++ b/extra/project-euler/150/150-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.150 tools.test ; +IN: project-euler.150.tests + +[ -271248680 ] [ euler150 ] unit-test diff --git a/extra/project-euler/150/150.factor b/extra/project-euler/150/150.factor index c7d878edcb..1b84b25d37 100644 --- a/extra/project-euler/150/150.factor +++ b/extra/project-euler/150/150.factor @@ -73,6 +73,6 @@ PRIVATE> 1000 (euler150) ; ! [ euler150 ] 10 ave-time -! 32858 ms run time - 10 trials +! 30208 ms ave run time - 593.45 SD (10 trials) MAIN: euler150 diff --git a/extra/project-euler/164/164-tests.factor b/extra/project-euler/164/164-tests.factor new file mode 100644 index 0000000000..013e8bd872 --- /dev/null +++ b/extra/project-euler/164/164-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.164 tools.test ; +IN: project-euler.164.tests + +[ 378158756814587 ] [ euler164 ] unit-test diff --git a/extra/project-euler/164/164.factor b/extra/project-euler/164/164.factor index 9d88e49e0e..5bc4fdc74e 100644 --- a/extra/project-euler/164/164.factor +++ b/extra/project-euler/164/164.factor @@ -33,6 +33,6 @@ PRIVATE> init-table 19 [ next-table ] times values sum ; ! [ euler164 ] 100 ave-time -! 8 ms run time - 100 trials +! 7 ms ave run time - 1.23 SD (100 trials) MAIN: euler164 diff --git a/extra/project-euler/169/169-tests.factor b/extra/project-euler/169/169-tests.factor new file mode 100644 index 0000000000..0722e7fa16 --- /dev/null +++ b/extra/project-euler/169/169-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.169 tools.test ; +IN: project-euler.169.tests + +[ 178653872807 ] [ euler169 ] unit-test diff --git a/extra/project-euler/169/169.factor b/extra/project-euler/169/169.factor index 4387662c90..ef43fc3c34 100644 --- a/extra/project-euler/169/169.factor +++ b/extra/project-euler/169/169.factor @@ -20,7 +20,7 @@ USING: combinators kernel math math.functions memoize ; ! 2 + 4 + 4 ! 2 + 8 -! What is f(1025)? +! What is f(10^25)? ! SOLUTION @@ -37,6 +37,6 @@ MEMO: fn ( n -- x ) 10 25 ^ fn ; ! [ euler169 ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.2 SD (100 trials) MAIN: euler169 diff --git a/extra/project-euler/173/173-tests.factor b/extra/project-euler/173/173-tests.factor new file mode 100644 index 0000000000..9417ba862f --- /dev/null +++ b/extra/project-euler/173/173-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.173 tools.test ; +IN: project-euler.173.tests + +[ 1572729 ] [ euler173 ] unit-test diff --git a/extra/project-euler/173/173.factor b/extra/project-euler/173/173.factor index 9f2984d37d..757dfb017a 100644 --- a/extra/project-euler/173/173.factor +++ b/extra/project-euler/173/173.factor @@ -33,6 +33,6 @@ PRIVATE> 1000000 laminae ; ! [ euler173 ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.35 SD (100 trials) MAIN: euler173 diff --git a/extra/project-euler/175/175-tests.factor b/extra/project-euler/175/175-tests.factor new file mode 100644 index 0000000000..541aa7dc47 --- /dev/null +++ b/extra/project-euler/175/175-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.175 tools.test ; +IN: project-euler.175.tests + +[ "1,13717420,8" ] [ euler175 ] unit-test diff --git a/extra/project-euler/175/175.factor b/extra/project-euler/175/175.factor index 853bf9a10f..9aebcf565c 100644 --- a/extra/project-euler/175/175.factor +++ b/extra/project-euler/175/175.factor @@ -53,6 +53,6 @@ PRIVATE> V{ 1 } clone dup 123456789/987654321 compute [ number>string ] map "," join ; ! [ euler175 ] 100 ave-time -! 0 ms run / 0 ms GC ave time - 100 trials +! 0 ms ave run time - 0.31 SD (100 trials) MAIN: euler175 diff --git a/extra/project-euler/186/186-tests.factor b/extra/project-euler/186/186-tests.factor new file mode 100644 index 0000000000..71d2f1c59b --- /dev/null +++ b/extra/project-euler/186/186-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.186 tools.test ; +IN: project-euler.186.tests + +[ 2325629 ] [ euler186 ] unit-test diff --git a/extra/project-euler/186/186.factor b/extra/project-euler/186/186.factor index b86f3675a1..679748b3c2 100644 --- a/extra/project-euler/186/186.factor +++ b/extra/project-euler/186/186.factor @@ -51,11 +51,10 @@ IN: project-euler.186 [ first ] [ advance ] bi ; : 2unless? ( x y ?quot quot -- ) - >r 2keep rot [ 2drop ] r> if ; inline + [ 2keep rot [ 2drop ] ] dip if ; inline : (p186) ( generator counter unionfind -- counter ) - 524287 over equiv-set-size 990000 < - [ + 524287 over equiv-set-size 990000 < [ pick [ next ] [ next ] bi [ = ] [ pick equate diff --git a/extra/project-euler/190/190-tests.factor b/extra/project-euler/190/190-tests.factor new file mode 100644 index 0000000000..edcfa981bb --- /dev/null +++ b/extra/project-euler/190/190-tests.factor @@ -0,0 +1,4 @@ +USING: project-euler.190 tools.test ; +IN: project-euler.190.tests + +[ 371048281 ] [ euler190 ] unit-test diff --git a/extra/project-euler/190/190.factor b/extra/project-euler/190/190.factor index c0b7cb577f..84ab74bb03 100644 --- a/extra/project-euler/190/190.factor +++ b/extra/project-euler/190/190.factor @@ -49,6 +49,6 @@ PRIVATE> 2 15 [a,b] [ P_m truncate ] sigma ; ! [ euler150 ] 100 ave-time -! 7 ms run time - 100 trials +! 5 ms ave run time - 1.01 SD (100 trials) MAIN: euler190 From 373c05ee499d0f3c175ed9ddb563e4df658fdae2 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Wed, 5 Nov 2008 19:24:19 -0500 Subject: [PATCH 11/14] Forgot to inline collect-benchmarks word --- extra/project-euler/ave-time/ave-time.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/project-euler/ave-time/ave-time.factor b/extra/project-euler/ave-time/ave-time.factor index 2a516513a5..f176bbc7d2 100644 --- a/extra/project-euler/ave-time/ave-time.factor +++ b/extra/project-euler/ave-time/ave-time.factor @@ -9,7 +9,7 @@ IN: project-euler.ave-time [ datastack ] [ '[ _ gc benchmark , ] tuck '[ _ _ with-datastack drop ] ] [ 1- ] tri* swap times call - ] { } make ; + ] { } make ; inline : nth-place ( x n -- y ) 10 swap ^ [ * round ] keep / ; From 15257b91ac4489fd4fe447204bcb3a88b96f28f8 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Wed, 5 Nov 2008 22:59:06 -0500 Subject: [PATCH 12/14] Refactor math.text.english using new combinators --- extra/math/text/english/english.factor | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/extra/math/text/english/english.factor b/extra/math/text/english/english.factor index 439d0a75fe..dfb0c00388 100755 --- a/extra/math/text/english/english.factor +++ b/extra/math/text/english/english.factor @@ -1,7 +1,7 @@ -! Copyright (c) 2007 Aaron Schaefer. +! Copyright (c) 2007, 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: combinators.lib kernel math math.functions math.parser namespaces -sequences splitting grouping combinators.short-circuit ; +USING: combinators.short-circuit grouping kernel math math.parser namespaces + sequences ; IN: math.text.english text ( n -- str ) - dup hundreds-place swap tens-place append ; + [ hundreds-place ] [ tens-place ] bi append ; : text-with-scale ( index seq -- str ) - dupd nth 3digits>text swap - scale-numbers [ - " " swap 3append - ] unless-empty ; + [ nth 3digits>text ] [ drop scale-numbers ] 2bi + [ " " swap 3append ] unless-empty ; : append-with-conjunction ( str1 str2 -- newstr ) over length zero? [ @@ -68,20 +66,19 @@ SYMBOL: and-needed? and-needed? off ] if ; -: (recombine) ( str index seq -- newstr seq ) +: (recombine) ( str index seq -- newstr ) 2dup nth zero? [ - nip + 2drop ] [ - [ text-with-scale ] keep - -rot append-with-conjunction swap + text-with-scale append-with-conjunction ] if ; : recombine ( seq -- str ) dup length 1 = [ first 3digits>text ] [ - dup set-conjunction "" swap - dup length [ swap (recombine) ] each drop + [ set-conjunction "" ] [ length ] [ ] tri + [ (recombine) ] curry each ] if ; : (number>text) ( n -- str ) From 636c344eb0615ca3b1a52c99083712d729802c2f Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Thu, 6 Nov 2008 01:20:08 -0500 Subject: [PATCH 13/14] Cleanup of math.analysis --- extra/math/analysis/analysis.factor | 34 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/extra/math/analysis/analysis.factor b/extra/math/analysis/analysis.factor index 7da1c96b61..b5f6a547ba 100755 --- a/extra/math/analysis/analysis.factor +++ b/extra/math/analysis/analysis.factor @@ -1,7 +1,7 @@ -! Copyright (C) 2008 Doug Coleman, Slava Pestov. +! Copyright (C) 2008 Doug Coleman, Slava Pestov, Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel math math.constants math.functions math.intervals -math.vectors namespaces sequences combinators.short-circuit ; +USING: combinators.short-circuit kernel math math.constants math.functions + math.vectors sequences ; IN: math.analysis #! gamma(x) = integral 0..inf [ t^(x-1) exp(-t) ] dt #! gamma(n+1) = n! for n > 0 dup { [ 0.0 <= ] [ 1.0 mod zero? ] } 1&& [ - drop 1./0. - ] [ - dup abs gamma-lanczos6 swap dup 0 > [ drop ] [ gamma-neg ] if + drop 1./0. + ] [ + [ abs gamma-lanczos6 ] keep dup 0 > [ drop ] [ gamma-neg ] if ] if ; : gammaln ( x -- gamma[x] ) #! gammaln(x) is an alternative when gamma(x)'s range #! varies too widely dup 0 < [ - drop 1./0. - ] [ - dup abs gammaln-lanczos6 swap dup 0 > [ drop ] [ gamma-neg ] if + drop 1./0. + ] [ + [ abs gammaln-lanczos6 ] keep dup 0 > [ drop ] [ gamma-neg ] if ] if ; : nth-root ( n x -- y ) - [ recip ] dip swap ^ ; + swap recip ^ ; ! Forth Scientific Library Algorithm #1 ! @@ -116,6 +116,6 @@ PRIVATE> : stirling-fact ( n -- fact ) [ pi 2 * * sqrt ] - [ dup e / swap ^ ] - [ 12 * recip 1 + ] - tri * * ; + [ [ e / ] keep ^ ] + [ 12 * recip 1+ ] tri * * ; + From 4d1d9b2087b9fb94f8db755f3b1cdf0325dfee55 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Thu, 6 Nov 2008 01:41:24 -0500 Subject: [PATCH 14/14] Fix short circuit usage in Project Euler solutions --- extra/project-euler/014/014.factor | 2 +- extra/project-euler/021/021.factor | 2 +- extra/project-euler/036/036.factor | 3 +-- extra/project-euler/043/043.factor | 16 ++++++++-------- extra/project-euler/052/052.factor | 2 +- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/extra/project-euler/014/014.factor b/extra/project-euler/014/014.factor index 93ed0c7754..3b812cf242 100644 --- a/extra/project-euler/014/014.factor +++ b/extra/project-euler/014/014.factor @@ -58,7 +58,7 @@ PRIVATE> diff --git a/extra/project-euler/021/021.factor b/extra/project-euler/021/021.factor index 2e2f6a6453..55060a7c71 100644 --- a/extra/project-euler/021/021.factor +++ b/extra/project-euler/021/021.factor @@ -27,7 +27,7 @@ IN: project-euler.021 : amicable? ( n -- ? ) dup sum-proper-divisors - { [ 2dup = not ] [ 2dup sum-proper-divisors = ] } 0&& 2nip ; + { [ = not ] [ sum-proper-divisors = ] } 2&& ; : euler021 ( -- answer ) 10000 [1,b] [ dup amicable? [ drop 0 ] unless ] sigma ; diff --git a/extra/project-euler/036/036.factor b/extra/project-euler/036/036.factor index 02d9372a8b..f5afeceb21 100644 --- a/extra/project-euler/036/036.factor +++ b/extra/project-euler/036/036.factor @@ -26,8 +26,7 @@ IN: project-euler.036 bin dup reverse = ] } 0&& nip ; + { [ palindrome? ] [ >bin dup reverse = ] } 1&& ; PRIVATE> diff --git a/extra/project-euler/043/043.factor b/extra/project-euler/043/043.factor index 28dc0b8bd6..268a6becfb 100644 --- a/extra/project-euler/043/043.factor +++ b/extra/project-euler/043/043.factor @@ -40,14 +40,14 @@ IN: project-euler.043 : interesting? ( seq -- ? ) { - [ 17 8 pick subseq-divisible? ] - [ 13 7 pick subseq-divisible? ] - [ 11 6 pick subseq-divisible? ] - [ 7 5 pick subseq-divisible? ] - [ 5 4 pick subseq-divisible? ] - [ 3 3 pick subseq-divisible? ] - [ 2 2 pick subseq-divisible? ] - } 0&& nip ; + [ 17 8 rot subseq-divisible? ] + [ 13 7 rot subseq-divisible? ] + [ 11 6 rot subseq-divisible? ] + [ 7 5 rot subseq-divisible? ] + [ 5 4 rot subseq-divisible? ] + [ 3 3 rot subseq-divisible? ] + [ 2 2 rot subseq-divisible? ] + } 1&& ; PRIVATE> diff --git a/extra/project-euler/052/052.factor b/extra/project-euler/052/052.factor index cfbb718200..5362a6e9b0 100644 --- a/extra/project-euler/052/052.factor +++ b/extra/project-euler/052/052.factor @@ -30,7 +30,7 @@ IN: project-euler.052 [ number>digits natural-sort ] map all-equal? ; : candidate? ( n -- ? ) - { [ dup odd? ] [ dup 3 mod zero? ] } 0&& nip ; + { [ odd? ] [ 3 mod zero? ] } 1&& ; : next-all-same ( x n -- n ) dup candidate? [