39 lines
895 B
ObjectPascal
39 lines
895 B
ObjectPascal
function ludic(): sequence of integer;
|
|
begin
|
|
yield 1;
|
|
var ludics := new List<integer>;
|
|
while True do
|
|
begin
|
|
var k := 0;
|
|
foreach var j in ludics[::-1] do
|
|
k := (k * j) div (j - 1) + 1;
|
|
ludics.Add(k + 2);
|
|
yield k + 2
|
|
end;
|
|
end;
|
|
|
|
function triplets(): sequence of (integer, integer, integer);
|
|
begin
|
|
var (a, b, c, d) := (0, 0, 0, 0);
|
|
foreach var k in ludic do
|
|
begin
|
|
if (k - 4 in [b, c, d]) and (k - 6 in [a, b, c]) then
|
|
yield (k - 6, k - 4, k);
|
|
(a, b, c, d) := (b, c, d, k);
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
writeln('First 25 ludic numbers:');
|
|
ludic.Take(25).Println;
|
|
|
|
write(#10, 'Ludic numbers below 1000: ');
|
|
ludic.TakeWhile(x -> x <= 1000).Count.Println;
|
|
|
|
writeln(#10, 'Ludic numbers 2000 to 2005: ');
|
|
ludic.Skip(2000 - 1).Take(6).Println;
|
|
|
|
writeln(#10, 'all triplets of ludic numbers < 250: ');
|
|
triplets.TakeWhile(x -> x[2] < 250).Println;
|
|
end.
|