Permutations: Difference between revisions
Content added Content deleted
(→{{header|Euphoria}}: Euphoria example added) |
|||
Line 601: | Line 601: | ||
<pre>[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]</pre> |
<pre>[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]</pre> |
||
=={{header|Euphoria}}== |
|||
{{trans|PureBasic}} |
|||
<lang euphoria>function reverse(sequence s, integer first, integer last) |
|||
object x |
|||
while first < last do |
|||
x = s[first] |
|||
s[first] = s[last] |
|||
s[last] = x |
|||
first += 1 |
|||
last -= 1 |
|||
end while |
|||
return s |
|||
end function |
|||
function nextPermutation(sequence s) |
|||
integer pos, last |
|||
object x |
|||
if length(s) < 1 then |
|||
return 0 |
|||
end if |
|||
pos = length(s)-1 |
|||
while compare(s[pos], s[pos+1]) >= 0 do |
|||
pos -= 1 |
|||
if pos < 1 then |
|||
return -1 |
|||
end if |
|||
end while |
|||
last = length(s) |
|||
while compare(s[last], s[pos]) <= 0 do |
|||
last -= 1 |
|||
end while |
|||
x = s[pos] |
|||
s[pos] = s[last] |
|||
s[last] = x |
|||
return reverse(s, pos+1, length(s)) |
|||
end function |
|||
object s |
|||
s = "abcd" |
|||
puts(1, s & '\t') |
|||
while 1 do |
|||
s = nextPermutation(s) |
|||
if atom(s) then |
|||
exit |
|||
end if |
|||
puts(1, s & '\t') |
|||
end while</lang> |
|||
Output: |
|||
<pre>abcd abdc acbd acdb adbc adcb bacd badc bcad bcda |
|||
bdac bdca cabd cadb cbad cbda cdab cdba dabc dacb |
|||
dbac dbca dcab dcba</pre> |
|||
=={{header|Factor}}== |
=={{header|Factor}}== |