-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfibo_akin_unit.pas
More file actions
66 lines (54 loc) · 945 Bytes
/
fibo_akin_unit.pas
File metadata and controls
66 lines (54 loc) · 945 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
{
5 kyu
Fibo akin
https://www.codewars.com/kata/5772382d509c65de7e000982
}
unit fibo_akin_unit;
{$mode objfpc}{$H+}
interface
function LengthSupUK(n, k: int64): int64;
function comp(n: int64): int64;
implementation
var
seq: array of int64;
procedure CalcSeqUpTo(n: int64);
var
last, i: int64;
begin
last := High(seq);
if last < n then
begin
SetLength(seq, n + 1);
for i := last + 1 to n do
seq[i] := seq[i - seq[i - 1]] + seq[i - seq[i - 2]];
end;
end;
function LengthSupUK(n, k: int64): int64;
var
i: int64;
begin
CalcSeqUpTo(n);
Result := 0;
for i := 1 to n do
if seq[i] >= k then
Inc(Result);
end;
function comp(n: int64): int64;
var
i: int64;
begin
CalcSeqUpTo(n);
Result := 0;
for i := 2 to n do
if seq[i] < seq[i - 1] then
Inc(Result);
end;
initialization
begin
seq := [];
SetLength(seq, 3);
seq[0] := 0;
seq[1] := 1;
seq[2] := 1;
end;
end.