RosettaCodeData/Task/Ludic-numbers/SequenceL/ludic-numbers.sequencel
2017-09-25 22:28:19 +02:00

26 lines
782 B
Text

import <Utilities/Set.sl>;
ludic(v(1), result(1)) :=
let
n := head(v);
filtered[i] := v[i] when (i-1) mod n /= 0;
in
result when size(v) < 1 else
ludic(filtered, result ++ [n]);
count : int(1) * int * int -> int;
count(v(1), top, index) :=
index-1 when v[index] > top else
count(v, top, index + 1);
main() :=
let
ludics := ludic(2...100000, [1]);
ludics250 := ludics[1 ... count(ludics, 250, 1)];
triplets[i] := [i, i+2, i+6] when elementOf(i+2, ludics250) and elementOf(i+6, ludics250)
foreach i within ludics250;
in
"First 25:\n" ++ toString(ludics[1...25]) ++
"\n\nLudics below 1000:\n" ++ toString(count(ludics, 1000, 1)) ++
"\n\nLudic 2000 to 2005:\n" ++ toString(ludics[2000...2005]) ++
"\n\nTriples below 250:\n" ++ toString(triplets) ;