Solution to Project Euler problem 25
parent
0a6975c423
commit
8748979546
|
@ -20,13 +20,13 @@ IN: project-euler.002
|
||||||
! --------
|
! --------
|
||||||
|
|
||||||
: last2 ( seq -- elt last )
|
: last2 ( seq -- elt last )
|
||||||
reverse first2 swap ;
|
2 tail* first2 ;
|
||||||
|
|
||||||
: fib-up-to ( n -- seq )
|
: fib-upto ( n -- seq )
|
||||||
{ 0 } 1 [ pick dupd < ] [ add dup last2 + ] [ ] while drop nip ;
|
{ 0 } 1 [ pick dupd < ] [ add dup last2 + ] [ ] while drop nip ;
|
||||||
|
|
||||||
: euler002 ( -- answer )
|
: euler002 ( -- answer )
|
||||||
1000000 fib-up-to [ even? ] subset sum ;
|
1000000 fib-upto [ even? ] subset sum ;
|
||||||
|
|
||||||
! [ euler002 ] 100 ave-time
|
! [ euler002 ] 100 ave-time
|
||||||
! 0 ms run / 0 ms GC ave time - 100 trials
|
! 0 ms run / 0 ms GC ave time - 100 trials
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
! Copyright (c) 2007 Aaron Schaefer.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: kernel math math.parser memoize sequences ;
|
||||||
|
IN: project-euler.025
|
||||||
|
|
||||||
|
! http://projecteuler.net/index.php?section=problems&id=25
|
||||||
|
|
||||||
|
! DESCRIPTION
|
||||||
|
! -----------
|
||||||
|
|
||||||
|
! The Fibonacci sequence is defined by the recurrence relation:
|
||||||
|
|
||||||
|
! Fn = Fn-1 + Fn-2, where F1 = 1 and F2 = 1.
|
||||||
|
|
||||||
|
! Hence the first 12 terms will be:
|
||||||
|
|
||||||
|
! F1 = 1
|
||||||
|
! F2 = 1
|
||||||
|
! F3 = 2
|
||||||
|
! F4 = 3
|
||||||
|
! F5 = 5
|
||||||
|
! F6 = 8
|
||||||
|
! F7 = 13
|
||||||
|
! F8 = 21
|
||||||
|
! F9 = 34
|
||||||
|
! F10 = 55
|
||||||
|
! F11 = 89
|
||||||
|
! F12 = 144
|
||||||
|
|
||||||
|
! The 12th term, F12, is the first term to contain three digits.
|
||||||
|
|
||||||
|
! What is the first term in the Fibonacci sequence to contain 1000 digits?
|
||||||
|
|
||||||
|
|
||||||
|
! SOLUTION
|
||||||
|
! --------
|
||||||
|
|
||||||
|
MEMO: fib ( m -- n )
|
||||||
|
dup 1 > [ 1 - dup fib swap 1 - fib + ] when ;
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
|
: (digit-fib) ( n term -- term )
|
||||||
|
2dup fib number>string length > [ 1+ (digit-fib) ] [ nip ] if ;
|
||||||
|
|
||||||
|
: digit-fib ( n -- term )
|
||||||
|
1 (digit-fib) ;
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
|
: euler025 ( -- answer )
|
||||||
|
1000 digit-fib ;
|
||||||
|
|
||||||
|
! [ euler025 ] 10 ave-time
|
||||||
|
! 5237 ms run / 72 ms GC ave time - 10 trials
|
||||||
|
|
||||||
|
MAIN: euler025
|
|
@ -8,6 +8,7 @@ USING: definitions io io.files kernel math.parser sequences vocabs
|
||||||
project-euler.013 project-euler.014 project-euler.015 project-euler.016
|
project-euler.013 project-euler.014 project-euler.015 project-euler.016
|
||||||
project-euler.017 project-euler.018 project-euler.019 project-euler.020
|
project-euler.017 project-euler.018 project-euler.019 project-euler.020
|
||||||
project-euler.021 project-euler.022 project-euler.023 project-euler.024
|
project-euler.021 project-euler.022 project-euler.023 project-euler.024
|
||||||
|
project-euler.025
|
||||||
project-euler.067 project-euler.134 ;
|
project-euler.067 project-euler.134 ;
|
||||||
IN: project-euler
|
IN: project-euler
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue