50 lines
1.1 KiB
Text
50 lines
1.1 KiB
Text
Module Non_continuous_subsequences (item$(), display){
|
|
Function positions(n) {
|
|
function onebit {
|
|
=lambda b=false (&c)-> {
|
|
=b :if c then b~:c=not b
|
|
}
|
|
}
|
|
dim k(n)=onebit(), p(n)
|
|
m=true
|
|
flush
|
|
for i=1 to 2^n {
|
|
for j=0 to n-1 :p(j)= k(j)(&m) :next
|
|
m1=p(0)
|
|
m2=0
|
|
for j=1 to n-1
|
|
if m2 then if m1>p(j) then m2=2:exit for
|
|
if m1 < p(j) then m2++
|
|
m1=p(j)
|
|
next
|
|
if m2=2 then data cons(p())' push a copy of p() to end of stack
|
|
m=true
|
|
}
|
|
=array([])
|
|
}
|
|
|
|
a=positions(len(item$()))
|
|
if display then
|
|
For i=0 to len(a)-1
|
|
b=array(a,i)
|
|
line$=format$("{0::-5})",i+1,)
|
|
for j=0 to len(b)-1
|
|
if array(b,j) then line$+=" "+item$(j)
|
|
next
|
|
print line$
|
|
doc$<=line$+{
|
|
}
|
|
next
|
|
end if
|
|
line$="Non continuous subsequences:"+str$(len(a))
|
|
Print line$
|
|
doc$<=line$+{
|
|
}
|
|
}
|
|
global doc$
|
|
document doc$ ' change string to document object
|
|
Non_continuous_subsequences ("1","2","3","4"), true
|
|
Non_continuous_subsequences ("a","e","i","o","u"), true
|
|
Non_continuous_subsequences ("R","o","s","e","t","t","a"), true
|
|
Non_continuous_subsequences ("1","2","3","4","5","6","7","8","9","0"), false
|
|
clipboard doc$
|