35 lines
1.1 KiB
Text
35 lines
1.1 KiB
Text
global num, cascade, sieve, nfilter
|
|
|
|
procedure main(A)
|
|
lds := ludic(2005) # All we need for the four tasks.
|
|
every writes("First 25:" | (" "||!lds)\25 | "\n")
|
|
every (n := 0) +:= (!lds < 1000, 1)
|
|
write("There are ",n," Ludic numbers < 1000.")
|
|
every writes("2000th through 2005th: " | (lds[2000 to 20005]||" ") | "\n")
|
|
writes("Triplets:")
|
|
every (250 > (x := !lds)) & (250 > (x+2 = !lds)) & (250 > (x+6 = !lds)) do
|
|
writes(" [",x,",",x+2,",",x+6,"]")
|
|
write()
|
|
end
|
|
|
|
procedure ludic(limit)
|
|
candidates := create seq(2)
|
|
put(cascade := [], create {
|
|
repeat {
|
|
report(l := num, limit)
|
|
put(cascade, create (cnt:=0, repeat ((cnt+:=1)%l=0, @sieve) | @@nfilter))
|
|
cascade[-2] :=: cascade[-1] # keep this sink as the last filter
|
|
@sieve
|
|
}
|
|
})
|
|
sieve := create while num := @candidates do @@(nfilter := create !cascade)
|
|
report(1, limit)
|
|
return @sieve
|
|
end
|
|
|
|
procedure report(ludic, limit)
|
|
static count, lds
|
|
initial {count := 0; lds := []}
|
|
if (count +:= 1) > limit then lds@&main
|
|
put(lds, ludic)
|
|
end
|