Time for an 2014 update…
This commit is contained in:
parent
372c577f83
commit
09687c4926
2520 changed files with 34227 additions and 7318 deletions
|
|
@ -0,0 +1 @@
|
|||
0 1{{.+}c!}{1000.<}w!
|
||||
40
Task/Fibonacci-sequence/COBOL/fibonacci-sequence-1.cobol
Normal file
40
Task/Fibonacci-sequence/COBOL/fibonacci-sequence-1.cobol
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
Program-ID. Fibonacci-Sequence.
|
||||
Data Division.
|
||||
Working-Storage Section.
|
||||
01 FIBONACCI-PROCESSING.
|
||||
05 FIBONACCI-NUMBER PIC 9(36) VALUE 0.
|
||||
05 FIB-ONE PIC 9(36) VALUE 0.
|
||||
05 FIB-TWO PIC 9(36) VALUE 1.
|
||||
01 DESIRED-COUNT PIC 9(4).
|
||||
01 FORMATTING.
|
||||
05 INTERM-RESULT PIC Z(35)9.
|
||||
05 FORMATTED-RESULT PIC X(36).
|
||||
05 FORMATTED-SPACE PIC x(35).
|
||||
Procedure Division.
|
||||
000-START-PROGRAM.
|
||||
Display "What place of the Fibonacci Sequence would you like (<173)? " with no advancing.
|
||||
Accept DESIRED-COUNT.
|
||||
If DESIRED-COUNT is less than 1
|
||||
Stop run.
|
||||
If DESIRED-COUNT is less than 2
|
||||
Move FIBONACCI-NUMBER to INTERM-RESULT
|
||||
Move INTERM-RESULT to FORMATTED-RESULT
|
||||
Unstring FORMATTED-RESULT delimited by all spaces into FORMATTED-SPACE,FORMATTED-RESULT
|
||||
Display FORMATTED-RESULT
|
||||
Stop run.
|
||||
Subtract 1 from DESIRED-COUNT.
|
||||
Move FIBONACCI-NUMBER to INTERM-RESULT.
|
||||
Move INTERM-RESULT to FORMATTED-RESULT.
|
||||
Unstring FORMATTED-RESULT delimited by all spaces into FORMATTED-SPACE,FORMATTED-RESULT.
|
||||
Display FORMATTED-RESULT.
|
||||
Perform 100-COMPUTE-FIBONACCI until DESIRED-COUNT = zero.
|
||||
Stop run.
|
||||
100-COMPUTE-FIBONACCI.
|
||||
Compute FIBONACCI-NUMBER = FIB-ONE + FIB-TWO.
|
||||
Move FIB-TWO to FIB-ONE.
|
||||
Move FIBONACCI-NUMBER to FIB-TWO.
|
||||
Subtract 1 from DESIRED-COUNT.
|
||||
Move FIBONACCI-NUMBER to INTERM-RESULT.
|
||||
Move INTERM-RESULT to FORMATTED-RESULT.
|
||||
Unstring FORMATTED-RESULT delimited by all spaces into FORMATTED-SPACE,FORMATTED-RESULT.
|
||||
Display FORMATTED-RESULT.
|
||||
45
Task/Fibonacci-sequence/COBOL/fibonacci-sequence-2.cobol
Normal file
45
Task/Fibonacci-sequence/COBOL/fibonacci-sequence-2.cobol
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
>>SOURCE FREE
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. fibonacci-main.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 num PIC 9(6) COMP.
|
||||
01 fib-num PIC 9(6) COMP.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
ACCEPT num
|
||||
CALL "fibonacci" USING CONTENT num RETURNING fib-num
|
||||
DISPLAY fib-num
|
||||
.
|
||||
END PROGRAM fibonacci-main.
|
||||
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. fibonacci RECURSIVE.
|
||||
|
||||
DATA DIVISION.
|
||||
LOCAL-STORAGE SECTION.
|
||||
01 1-before PIC 9(6) COMP.
|
||||
01 2-before PIC 9(6) COMP.
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 num PIC 9(6) COMP.
|
||||
|
||||
01 fib-num PIC 9(6) COMP BASED.
|
||||
|
||||
PROCEDURE DIVISION USING num RETURNING fib-num.
|
||||
ALLOCATE fib-num
|
||||
EVALUATE num
|
||||
WHEN 0
|
||||
MOVE 0 TO fib-num
|
||||
WHEN 1
|
||||
MOVE 1 TO fib-num
|
||||
WHEN OTHER
|
||||
SUBTRACT 1 FROM num
|
||||
CALL "fibonacci" USING CONTENT num RETURNING 1-before
|
||||
SUBTRACT 1 FROM num
|
||||
CALL "fibonacci" USING CONTENT num RETURNING 2-before
|
||||
ADD 1-before TO 2-before GIVING fib-num
|
||||
END-EVALUATE
|
||||
.
|
||||
END PROGRAM fibonacci.
|
||||
|
|
@ -1,4 +1,8 @@
|
|||
(defun fibonacci-recursive (n)
|
||||
(if (< n 2)
|
||||
n
|
||||
(+ (fibonacci-recursive (- n 2)) (fibonacci-recursive (- n 1)))))
|
||||
(defun fibonacci-iterative (n &aux (f0 0) (f1 1))
|
||||
(case n
|
||||
(0 f0)
|
||||
(1 f1)
|
||||
(t (loop for n from 2 to n
|
||||
for a = f0 then b and b = f1 then result
|
||||
for result = (+ a b)
|
||||
finally (return result)))))
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
(defun fibonacci-iterative (n &aux (f0 0) (f1 1))
|
||||
(case n
|
||||
(0 f0)
|
||||
(1 f1)
|
||||
(t (loop for n from 2 to n
|
||||
for a = f0 then b and b = f1 then result
|
||||
for result = (+ a b)
|
||||
finally (return result)))))
|
||||
(defun fibonacci (n)
|
||||
(let ((a 0) (b 1) (c n))
|
||||
(loop for i from 2 to n do
|
||||
(setq c (+ a b)
|
||||
a b
|
||||
b c))
|
||||
c))
|
||||
|
|
|
|||
|
|
@ -1,4 +1 @@
|
|||
(defun fibonacci-tail-recursive ( n &optional (a 0) (b 1))
|
||||
(if (= n 0)
|
||||
a
|
||||
(fibonacci-tail-recursive (- n 1) b (+ a b))))
|
||||
(loop for x = 0 then y and y = 1 then (+ x y) do (print x))
|
||||
|
|
|
|||
|
|
@ -1,9 +1,4 @@
|
|||
(defun fib (n &optional (a 1) (b 0) (p 0) (q 1))
|
||||
(if (= n 1) (+ (* b p) (* a q))
|
||||
(fib (ash n -1)
|
||||
(if (evenp n) a (+ (* b q) (* a (+ p q))))
|
||||
(if (evenp n) b (+ (* b p) (* a q)))
|
||||
(+ (* p p) (* q q))
|
||||
(+ (* q q) (* 2 p q))))) ;p is Fib(2^n-1), q is Fib(2^n).
|
||||
|
||||
(print (fib 100000))
|
||||
(defun fibonacci-recursive (n)
|
||||
(if (< n 2)
|
||||
n
|
||||
(+ (fibonacci-recursive (- n 2)) (fibonacci-recursive (- n 1)))))
|
||||
|
|
|
|||
|
|
@ -1 +1,4 @@
|
|||
(loop for x = 0 then y and y = 1 then (+ x y) do (print x))
|
||||
(defun fibonacci-tail-recursive ( n &optional (a 0) (b 1))
|
||||
(if (= n 0)
|
||||
a
|
||||
(fibonacci-tail-recursive (- n 1) b (+ a b))))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
(defun fib (n &optional (a 1) (b 0) (p 0) (q 1))
|
||||
(if (= n 1) (+ (* b p) (* a q))
|
||||
(fib (ash n -1)
|
||||
(if (evenp n) a (+ (* b q) (* a (+ p q))))
|
||||
(if (evenp n) b (+ (* b p) (* a q)))
|
||||
(+ (* p p) (* q q))
|
||||
(+ (* q q) (* 2 p q))))) ;p is Fib(2^n-1), q is Fib(2^n).
|
||||
|
||||
(print (fib 100000))
|
||||
17
Task/Fibonacci-sequence/Forth/fibonacci-sequence-2.fth
Normal file
17
Task/Fibonacci-sequence/Forth/fibonacci-sequence-2.fth
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
: F-start, here 1 0 dup , ;
|
||||
: F-next, over + swap
|
||||
dup 0> IF dup , true ELSE false THEN ;
|
||||
|
||||
: computed-table ( compile: 'start 'next / run: i -- x )
|
||||
create
|
||||
>r execute
|
||||
BEGIN r@ execute not UNTIL rdrop
|
||||
does>
|
||||
swap cells + @ ;
|
||||
|
||||
' F-start, ' F-next, computed-table fibonacci 2drop
|
||||
here swap - cell/ Constant #F/64 \ # of fibonacci numbers generated
|
||||
|
||||
16 fibonacci . 987 ok
|
||||
#F/64 . 93 ok
|
||||
92 fibonacci . 7540113804746346429 ok \ largest number generated.
|
||||
25
Task/Fibonacci-sequence/GML/fibonacci-sequence.gml
Normal file
25
Task/Fibonacci-sequence/GML/fibonacci-sequence.gml
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
///fibonacci(n)
|
||||
//Returns the nth fibonacci number
|
||||
|
||||
var n, numb;
|
||||
n = argument0;
|
||||
|
||||
if (n == 0)
|
||||
{
|
||||
numb = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
var fm2, fm1;
|
||||
fm2 = 0;
|
||||
fm1 = 1;
|
||||
numb = 1;
|
||||
repeat(n-1)
|
||||
{
|
||||
numb = fm2+fm1;
|
||||
fm2 = fm1;
|
||||
fm1 = numb;
|
||||
}
|
||||
}
|
||||
|
||||
return numb;
|
||||
1
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-8.hs
Normal file
1
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-8.hs
Normal file
|
|
@ -0,0 +1 @@
|
|||
let fib x = if x < 1 then 0 else (if x < 3 then 1 else (fib(x - 1) + fib(x - 2)))
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
(define (fibonacci n)
|
||||
(let (a 0 b 1 c n i 2)
|
||||
(while (<= i n)
|
||||
(setq c (+ a b)
|
||||
a b
|
||||
b c)
|
||||
(++ i))
|
||||
c))
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
proc Fibonacci(n: int): int64 =
|
||||
var first: int64 = 0
|
||||
var second: int64 = 1
|
||||
var t: int64 = 0
|
||||
while n > 1:
|
||||
t = first + second
|
||||
first = second
|
||||
second = t
|
||||
dec(n)
|
||||
result = second
|
||||
proc Fibonacci(n: int): int =
|
||||
var
|
||||
first = 0
|
||||
second = 1
|
||||
|
||||
for i in 0 .. <n:
|
||||
swap first, second
|
||||
second += first
|
||||
|
||||
result = first
|
||||
|
|
|
|||
|
|
@ -1,9 +1,32 @@
|
|||
sub fibIter {
|
||||
my $n = shift;
|
||||
return $n if $n < 2;
|
||||
# Iterative Fibonacci with bignum support.
|
||||
# Multi-licensed under your choice of:
|
||||
# 1. The GNU Free Documentation License (GFDL).
|
||||
# 2. The MIT/X11 license.
|
||||
# 3. The GNU General Publice License (GPL).
|
||||
# 4. The Public Domain as understood by the CC-Zero public domain dedication.
|
||||
|
||||
my $fibPrev = 1;
|
||||
my $fib = 1;
|
||||
($fibPrev, $fib) = ($fib, $fib + $fibPrev) for 2..$n-1;
|
||||
$fib;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Math::BigInt try => 'GMP';
|
||||
|
||||
sub fib_iter
|
||||
{
|
||||
my ($n) = @_;
|
||||
|
||||
my $this_fib = Math::BigInt->new(0);
|
||||
my $next_fib = Math::BigInt->new(1);
|
||||
|
||||
my $pos = 0;
|
||||
|
||||
while ($pos < $n)
|
||||
{
|
||||
($this_fib, $next_fib) = ($next_fib, $this_fib+$next_fib);
|
||||
}
|
||||
continue
|
||||
{
|
||||
$pos++;
|
||||
}
|
||||
|
||||
return $this_fib;
|
||||
}
|
||||
|
|
|
|||
30
Task/Fibonacci-sequence/Python/fibonacci-sequence-7.py
Normal file
30
Task/Fibonacci-sequence/Python/fibonacci-sequence-7.py
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
def prevPowTwo(n):
|
||||
'Gets the power of two that is less than or equal to the given input'
|
||||
if ((n & -n) == n):
|
||||
return n
|
||||
else:
|
||||
n -= 1
|
||||
n |= n >> 1
|
||||
n |= n >> 2
|
||||
n |= n >> 4
|
||||
n |= n >> 8
|
||||
n |= n >> 16
|
||||
n += 1
|
||||
return (n/2)
|
||||
|
||||
def crazyFib(n):
|
||||
'Crazy fast fibonacci number calculation'
|
||||
powTwo = prevPowTwo(n)
|
||||
|
||||
q = r = i = 1
|
||||
s = 0
|
||||
|
||||
while(i < powTwo):
|
||||
i *= 2
|
||||
q, r, s = q*q + r*r, r * (q + s), (r*r + s*s)
|
||||
|
||||
while(i < n):
|
||||
i += 1
|
||||
q, r, s = q+r, q, r
|
||||
|
||||
return q
|
||||
Loading…
Add table
Add a link
Reference in a new issue