Best shuffle: Difference between revisions
Content added Content deleted
(Add scheme) |
(Javascript implementation) |
||
Line 87: | Line 87: | ||
a, a (1) |
a, a (1) |
||
</lang> |
</lang> |
||
=={{header|Javascript}}== |
|||
Based on the J implementation (and this would be a lot more concise if we used something like jQuery): |
|||
<lang javascript>function raze(a) { |
|||
var r= []; |
|||
for (var j= 0; j<a.length; j++) |
|||
for (var k= 0; k<a[j].length; k++) |
|||
r.push(a[j][k]); |
|||
return r; |
|||
} |
|||
function bestShuf(txt) { |
|||
var chs= txt.split(''); |
|||
var gr= {}; |
|||
var mx= 0; |
|||
for (var j= 0; j<chs.length; j++) { |
|||
var ch= chs[j]; |
|||
if (null == gr[ch]) gr[ch]= []; |
|||
gr[ch].push(j); |
|||
if (mx < gr[ch].length) mx++; |
|||
} |
|||
var inds= []; |
|||
for (var ch in gr) |
|||
inds.push(gr[ch]); |
|||
var ndx= raze(inds); |
|||
var cycles= []; |
|||
for (var k= 0; k < mx; k++) |
|||
cycles[k]= []; |
|||
for (var j= 0; j<chs.length; j++) |
|||
cycles[j%mx].push(ndx[j]); |
|||
for (var k= 0; k < mx; k++) |
|||
cycles[k].push(cycles[k].shift()); |
|||
var prm= raze(cycles); |
|||
var shf= []; |
|||
for (var j= 0; j<chs.length; j++) |
|||
shf.push(chs[prm[j]]); |
|||
return shf.join(''); |
|||
} |
|||
function disp(ex) { |
|||
var r= bestShuf(ex); |
|||
var n= 0; |
|||
for (var j= 0; j<ex.length; j++) |
|||
if (ex.substr(j, 1) == r.substr(j,1)) |
|||
n++; |
|||
return ex+', '+r+', ('+n+')\r\n'; |
|||
}</lang> |
|||
Example: |
|||
<lang html><html><head><title></title></head><body><pre id="out"></pre></body></html> |
|||
<script type="text/javascript"> |
|||
/* ABOVE CODE GOES HERE */ |
|||
var sample= ['abracadabra', 'seesaw', 'elk', 'grrrrrr', 'up', 'a'] |
|||
for (var i= 0; i<sample.length; i++) |
|||
document.getElementById('out').innerHTML+= disp(sample[i]); |
|||
</script></lang> |
|||
Produces: |
|||
<lang>abracadabra, bdabararaca, (1) |
|||
seesaw, easews, (0) |
|||
elk, lke, (0) |
|||
grrrrrr, rgrrrrr, (5) |
|||
up, pu, (0) |
|||
a, a, (1)</lang> |
|||
=={{header|PicoLisp}}== |
=={{header|PicoLisp}}== |