Add alternate solution to Project Euler problem #2
parent
0ef3ff4058
commit
46911bc797
extra/project-euler/002
|
@ -3,3 +3,4 @@ IN: project-euler.002.tests
|
|||
|
||||
[ 4613732 ] [ euler002 ] unit-test
|
||||
[ 4613732 ] [ euler002a ] unit-test
|
||||
[ 4613732 ] [ euler002b ] unit-test
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
! Copyright (c) 2007 Aaron Schaefer, Alexander Solovyov.
|
||||
! Copyright (c) 2007, 2008 Aaron Schaefer, Alexander Solovyov, Vishal Talwar.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel math sequences shuffle ;
|
||||
IN: project-euler.002
|
||||
|
@ -50,4 +50,31 @@ PRIVATE>
|
|||
! [ euler002a ] 100 ave-time
|
||||
! 0 ms ave run time - 0.2 SD (100 trials)
|
||||
|
||||
MAIN: euler002a
|
||||
|
||||
<PRIVATE
|
||||
|
||||
: next-fibs ( x y -- y x+y )
|
||||
tuck + ;
|
||||
|
||||
: ?retotal ( total fib- fib+ -- retotal fib- fib+ )
|
||||
dup even? [ [ nip + ] 2keep ] when ;
|
||||
|
||||
: (sum-even-fibs-below) ( partial fib- fib+ max -- total )
|
||||
2dup > [
|
||||
3drop
|
||||
] [
|
||||
[ ?retotal next-fibs ] dip (sum-even-fibs-below)
|
||||
] if ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
: sum-even-fibs-below ( max -- sum )
|
||||
[ 0 0 1 ] dip (sum-even-fibs-below) ;
|
||||
|
||||
: euler002b ( -- answer )
|
||||
4000000 sum-even-fibs-below ;
|
||||
|
||||
! [ euler002b ] 100 ave-time
|
||||
! 0 ms ave run time - 0.0 SD (100 trials)
|
||||
|
||||
MAIN: euler002b
|
||||
|
|
Loading…
Reference in New Issue