]> 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 1dd7878a3b84fac50f43b4ad68c2893258331cff..7d8961ec6d8adbdd959602d1b3b0d41d9165d253 100644 (file)
@@ -1,7 +1,7 @@
 ! 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 ranges project-euler.common
+sequences sets ;
 IN: project-euler.023
 
 ! http://projecteuler.net/index.php?section=problems&id=23
@@ -37,25 +37,23 @@ 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? ] subset ;
+    [1..b] [ abundant? ] filter ;
 
 : possible-sums ( seq -- seq )
-    dup { } -rot [
-        dupd [ + ] curry map
-        rot append prune swap 1 tail
-    ] each drop natural-sort ;
+    HS{ } clone
+    [ dupd '[ _ [ + _ adjoin ] with each ] each ]
+    keep members ;
 
 PRIVATE>
 
 : euler023 ( -- answer )
-    20161 abundants-upto possible-sums source-023 diff sum ;
-
-! TODO: solution is still too slow, although it takes under 1 minute
+    source-023
+    20161 abundants-upto possible-sums diff sum ;
 
 ! [ euler023 ] time
-! 52780 ms run / 3839 ms GC
+! 2.15542 seconds
 
-MAIN: euler023
+SOLUTION: euler023