]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/project-euler/023/023.factor
factor: trim using lists
[factor.git] / extra / project-euler / 023 / 023.factor
index 7c28ebfa6cd9aacac09ac74c6e9c6e47bf91e85d..7d8961ec6d8adbdd959602d1b3b0d41d9165d253 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (c) 2008 Aaron Schaefer.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel math math.ranges project-euler.common sequences sets sorting ;
+USING: kernel math ranges project-euler.common
+sequences sets ;
 IN: project-euler.023
 
 ! http://projecteuler.net/index.php?section=problems&id=23
@@ -36,16 +37,15 @@ IN: project-euler.023
 <PRIVATE
 
 : source-023 ( -- seq )
-    46 [1,b] 47 20161 2 <range> append ;
+    46 [1..b] 47 20161 2 <range> append ;
 
 : abundants-upto ( n -- seq )
-    [1,b] [ abundant? ] filter ;
+    [1..b] [ abundant? ] filter ;
 
 : possible-sums ( seq -- seq )
-    dup { } -rot [
-        dupd [ + ] curry map
-        rot append prune swap rest
-    ] each drop natural-sort ;
+    HS{ } clone
+    [ dupd '[ _ [ + _ adjoin ] with each ] each ]
+    keep members ;
 
 PRIVATE>
 
@@ -53,9 +53,7 @@ PRIVATE>
     source-023
     20161 abundants-upto possible-sums diff sum ;
 
-! TODO: solution is still too slow, although it takes under 1 minute
-
 ! [ euler023 ] time
-! 52780 ms run / 3839 ms GC
+! 2.15542 seconds
 
 SOLUTION: euler023