diff --git a/extra/project-euler/044/044.factor b/extra/project-euler/044/044.factor index 4c2306c480..b4300d0fe8 100644 --- a/extra/project-euler/044/044.factor +++ b/extra/project-euler/044/044.factor @@ -1,7 +1,7 @@ ! Copyright (c) 2008 Aaron Schaefer. ! See http://factorcode.org/license.txt for BSD license. USING: kernel math math.functions math.ranges math.order -project-euler.common sequences ; +project-euler.common sequences layouts ; IN: project-euler.044 ! http://projecteuler.net/index.php?section=problems&id=44 @@ -29,20 +29,26 @@ IN: project-euler.044 : euler044 ( -- answer ) - 2500 [1,b] [ nth-pentagonal ] map dup cartesian-product - [ first2 sum-and-diff? ] filter [ first2 - abs ] [ min ] map-reduce ; + most-positive-fixnum >fixnum + 2500 [1,b] [ + 2500 [1,b] [ + euler044-step + ] with each + ] each ; ! [ euler044 ] 10 ave-time ! 4996 ms ave run time - 87.46 SD (10 trials) -! TODO: this solution is ugly and not very efficient...find a better algorithm - SOLUTION: euler044 diff --git a/extra/project-euler/common/common.factor b/extra/project-euler/common/common.factor index 4119f8205c..efec77355b 100644 --- a/extra/project-euler/common/common.factor +++ b/extra/project-euler/common/common.factor @@ -91,7 +91,7 @@ PRIVATE> number>string natural-sort >string "123456789" = ; : pentagonal? ( n -- ? ) - dup 0 > [ 24 * 1 + sqrt 1 + 6 / 1 mod zero? ] [ drop f ] if ; + dup 0 > [ 24 * 1 + sqrt 1 + 6 / 1 mod zero? ] [ drop f ] if ; inline : penultimate ( seq -- elt ) dup length 2 - swap nth ;