Nonoblock: Difference between revisions

Line 1,066:
 
</pre >
===Non Recursive===
<lang M2000 Interpreter>
Module Nonoblock (n, m) {
Print "Cells:",n," Blocks:",m
Dim n(1 to n), m(1 to m), sp(1 to m*2), sk(1 to m*2), part(1 to m)
queue=0
If m>0 Then {
Print "Block Size:",
For i=1 to m {
Read m(i)
Print m(i),
}
Print
part(m)=m(m)
If m>1 Then {
For i=m-1 to 1 {
part(i)=m(i)+part(i+1)+1
}
}
}
If part(1)>n Then {
Print "Impossible"
} Else {
p1=0
l=0
Counter=0
While p1<=n-part(1) {
k=0
p=p1+1
For i=1 to n {
n(i)=0
}
flag=True
Repeat {
While k<m {
k++
l=0
While l<m(k) και p<=n {
l++
n(p)=1
p++
}
If p<n Then {
n(p)=0
p++
If k<m Then {
If p+part(k+1)<n+1 Then {
queue++
sp(queue)=p
sk(queue)=k
}
}
}
}
flag=True
If l=m(k) Then {
counter++
Print Str$(counter,"0000 ");
For i=1 to n {
Print n(i);" ";
}
Print
If queue>0 Then {
p=sp(queue)
k=sk(queue)
queue--
For i=p to n {
n(i)=0
}
p++
If k<m Then {
If p+part(k+1)<n+1 Then {
queue++
sp(queue)=p
' sk(queue)=k
}
}
flag=False
}
}
} Until flag
p1++
If k=0 Then Exit
}
}
}
 
Nonoblock 5,2,2,1
Nonoblock 5,0
Nonoblock 10,1,8
Nonoblock 15,4,2,3,2,3
Nonoblock 5,2,3,2
</lang>
 
=={{header|Phix}}==
Anonymous user