]> gitweb.factorcode.org Git - factor.git/commitdiff
Add alternate solution to Project Euler problem #2
authorAaron Schaefer <aaron@elasticdog.com>
Tue, 2 Dec 2008 05:46:38 +0000 (00:46 -0500)
committerAaron Schaefer <aaron@elasticdog.com>
Tue, 2 Dec 2008 05:46:38 +0000 (00:46 -0500)
extra/project-euler/002/002-tests.factor
extra/project-euler/002/002.factor

index bb0251858071d66df3cb41c4b3840e9d77daa1d5..46015bee3edb82112343a09a1bb705650eda2ded 100644 (file)
@@ -3,3 +3,4 @@ IN: project-euler.002.tests
 
 [ 4613732 ] [ euler002 ] unit-test
 [ 4613732 ] [ euler002a ] unit-test
+[ 4613732 ] [ euler002b ] unit-test
index fae535cba9dfaaf39b9290959b520f7c54585bc3..da20c874b5c5bb150619ccc89d2c427383f0b82d 100644 (file)
@@ -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