Anonymous user
Best shuffle: Difference between revisions
m
→{{header|REXX}}: re-aligned DO-loops indentation. -- ~~~~
m (→{{header|REXX}}: re-aligned DO-loops indentation. -- ~~~~) |
|||
Line 2,232:
=={{header|REXX}}==
<lang rexx>/*REXX program to find the best shuffle (
list='tree abracadabra seesaw elk grrrrrr up a'
L=L+5
do
$=word(list,
say 'original:' left($,L) 'new:' left(new,L) 'count:'
end
exit
/*─────────────────────────────────────bestShuffle procedure────────────*/
bestShuffle: procedure; parse arg x 1 ox; Lx=length(x)
if Lx<3 then return reverse(x) /*fast track these puppies. */
do j=1 for Lx-1 /*first take care of replications*/
a=substr(x,j ,1)
b=substr(x,j+1,1); if a\==b then iterate
if a\==b then iterate▼
_=verify(x,a); if _==0 then iterate /*switch 1st rep with some char. */
y=substr(x,_,1); x=overlay(a,x,_
x=overlay(y,x,j)
rx=reverse(x); _=verify(rx,a); if _==0 then iterate /*¬ enuf unique*/
y=substr(rx,_,1); _=lastpos(y,x)
x=overlay(a,x,_); x=overlay(y,x,j+1)
end /*j*/
do j=1 for Lx /*take care of same o'-same o's. */▼
a=substr(x, j,1)▼
if j==Lx then x=left(x,j-2)a||substr(x,j-1,1) /*spec case of last*/▼
else x=left(x,j-1)substr(x,j+1,1)a || substr(x,j+2)▼
end▼
▲ b=substr(ox,k,1); if a\==b then iterate
▲ end /*k*/
return x
/*─────────────────────────────────────kSame procedure──────────────────*/
do
k = k + (substr(x,
end /*m*/
return k</lang>
'''output''' (with a freebie thrown in):
|