-! Copyright (c) 2008 Eric Mertens
+! Copyright (c) 2008 Eric Mertens.
! See http://factorcode.org/license.txt for BSD license.
-USING: arrays assocs combinators kernel math sequences math.ranges locals ;
+USING: arrays assocs kernel math math.order ranges sequences project-euler.common ;
IN: project-euler.076
! http://projecteuler.net/index.php?section=problems&id=76
! How many different ways can one hundred be written as a
! sum of at least two positive integers?
+
! SOLUTION
! --------
<PRIVATE
: init ( n -- table )
- [1,b] [ 0 2array 0 ] H{ } map>assoc
+ [1..b] [ 0 2array 0 ] H{ } map>assoc
1 { 0 0 } pick set-at ;
: use ( n i -- n i )
over zero? [
3drop
] [
- [ [ 1- 2array ] dip at ]
+ [ [ 1 - 2array ] dip at ]
[ [ use 2array ] dip at + ]
[ [ 2array ] dip set-at ] 3tri
] if ;
:: each-subproblem ( n quot -- )
- n [1,b] [ dup [1,b] quot with each ] each ; inline
-
-PRIVATE>
+ n [1..b] [ dup [1..b] quot with each ] each ; inline
: (euler076) ( n -- m )
dup init
[ [ ways ] curry each-subproblem ]
- [ [ dup 2array ] dip at 1- ] 2bi ;
+ [ [ dup 2array ] dip at 1 - ] 2bi ;
-: euler076 ( -- m )
+PRIVATE>
+
+: euler076 ( -- answer )
100 (euler076) ;
+
+! [ euler076 ] 100 ave-time
+! 560 ms ave run time - 17.74 SD (100 trials)
+
+SOLUTION: euler076