]> gitweb.factorcode.org Git - factor.git/commitdiff
faster implementation of euler023 using a hashtable
authorJon Harper <jon.harper87@gmail.com>
Wed, 30 Sep 2009 14:08:45 +0000 (23:08 +0900)
committerJon Harper <jon.harper87@gmail.com>
Wed, 30 Sep 2009 14:08:45 +0000 (23:08 +0900)
extra/project-euler/023/023.factor

index 7c28ebfa6cd9aacac09ac74c6e9c6e47bf91e85d..79aeccd8b44dacd443c580ec15586883938d04d7 100644 (file)
@@ -1,6 +1,6 @@
 ! 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 math.ranges project-euler.common sequences sets sorting assocs fry ;
 IN: project-euler.023
 
 ! http://projecteuler.net/index.php?section=problems&id=23
@@ -42,10 +42,9 @@ IN: project-euler.023
     [1,b] [ abundant? ] filter ;
 
 : possible-sums ( seq -- seq )
-    dup { } -rot [
-        dupd [ + ] curry map
-        rot append prune swap rest
-    ] each drop natural-sort ;
+    H{ } clone
+    [ dupd '[ _ [ + _ conjoin ] with each ] each ]
+    keep keys ;
 
 PRIVATE>
 
@@ -53,9 +52,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