Código Javascript:
Ver original
<script type="text/javascript"> function alternar(t1, t2){ var txt = t1.value; var aceptados = /[A-z]/; var letras = new Array(); for (a = 0; a<txt.length; a++){ if(aceptados.test(txt.charAt(a))){ letras[letras.length] = a; } } var cant = Math.round(Math.random()*letras.length); var aleat = new Array(); for (b = 0; b<cant; b++){ aleat[b] = Math.round(Math.random()*letras.length); } for(i = 0; i<cant; i++){ for(j = 0; j<cant; j++){ if(aleat[i]==aleat[j] && i!=j){ if(aleat[j]<letras.length){ aleat[j] += 1; }else{ aleat[j] -= 1; } } } } var result = ''; for(t = 0; t<txt.length; t++){ if(!(aceptados.test(txt.charAt(t)))){ result += txt.charAt(t); }else{ for(l = 0; l<letras.length; l++){ for(r = 0; r<aleat.length; r++){ if(letras[l] == aleat[r]){ result += txt.charAt(letras[l]).toUpperCase(); }else{ result += txt.charAt(letras[l]); } } } } } t2.value = result; } </script>
La cuestión es que si yo por ejempplo pongo 'abc123' (con 3 mayúsculas y posiciones 2, 2 y 3) sale 'aaabbbccCaaabbbccCaaabbbccC123'. Sé que tiene que ser por los bucles porque se repite parte del string pero lo he revisado 40 veces y todavía no logro ver dónde está el error. A ver si me podéis ayudar.
Saludos y gracias :D