RosettaCodeData/Task/Non-continuous-subsequences/M2000-Interpreter/non-continuous-subsequences.m2000
2023-07-01 13:44:08 -04:00

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$