(phixonline)-->
with javascript_semantics
integer count = 0
procedure ncs(sequence rest, object taken, integer ri=0, bool contig=false, bool gap=false)
if ri>=length(rest) then
if contig then
if integer(taken) then
count += 1
else
?taken
end if
end if
else
ri += 1
ncs(rest,iff(integer(taken)?taken+1:deep_copy(taken)&rest[ri]),ri,gap,gap)
ncs(rest,taken,ri,contig,iff(integer(taken)?taken!=0:length(taken)!=0))
end if
end procedure
ncs({1,2,3},{})
?"==="
ncs({1,2,3,4},{})
?"==="
atom t0 = time()
sequence s = {}
for i=1 to 20 do
count = 0
ncs(tagset(i),0)
s = append(s,count)
end for
?elapsed(time()-t0)
pp(s)