Add alternate solution to Project Euler problem #2
parent
0ef3ff4058
commit
46911bc797
|
@ -3,3 +3,4 @@ IN: project-euler.002.tests
|
||||||
|
|
||||||
[ 4613732 ] [ euler002 ] unit-test
|
[ 4613732 ] [ euler002 ] unit-test
|
||||||
[ 4613732 ] [ euler002a ] 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.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel math sequences shuffle ;
|
USING: kernel math sequences shuffle ;
|
||||||
IN: project-euler.002
|
IN: project-euler.002
|
||||||
|
@ -50,4 +50,31 @@ PRIVATE>
|
||||||
! [ euler002a ] 100 ave-time
|
! [ euler002a ] 100 ave-time
|
||||||
! 0 ms ave run time - 0.2 SD (100 trials)
|
! 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