diff --git a/extra/project-euler/023/023.factor b/extra/project-euler/023/023.factor index 7c28ebf..a1894cf 100644 --- a/extra/project-euler/023/023.factor +++ b/extra/project-euler/023/023.factor @@ -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 locals assocs ; IN: project-euler.023 ! http://projecteuler.net/index.php?section=problems&id=23 @@ -42,10 +42,8 @@ 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 ; + [let | table [ H{ } ] | + dup [ [ + t swap table set-at ] with each ] curry each table keys ] ; PRIVATE> @@ -53,6 +51,8 @@ PRIVATE> source-023 20161 abundants-upto possible-sums diff sum ; + + ! TODO: solution is still too slow, although it takes under 1 minute ! [ euler023 ] time