-! Copyright (c) 2007 Aaron Schaefer.
+! 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 ;
+USING: kernel math ranges project-euler.common
+sequences sets ;
IN: project-euler.023
! http://projecteuler.net/index.php?section=problems&id=23
<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 seq-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