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