Ver Mensaje Individual
  #15 (permalink)  
Antiguo 27/03/2007, 18:33
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años
Puntos: 45
Re: permutaciones

Bueno, mi primer mensaje en este hilo tiene más de tres años, pero hace una semana me picó el gusanillo y estuve probando para ver si se podía hacer un toString() con las características pedidas (una semana me ha costado sacarlo ). Éstas eran:

Si toString() permite traducir de una base numérica a otra tenemos el problema de que no nos da combinación de los caracteres, es decir:
si cambiamos de base 10 a base 10 pasa esto:
0=0
1=1
.
.
8=8
9=9
10=10
11=11
evidentemente no se toca nada. Bueno, yo quería que al llegar al 10 se repitiera el 00, ya que la siguiente combinación con [0,1,2,3,4,5,6,7,8,9] después de 9 es 00, y luego 01...
0=0
1=1
.
.
8=8
9=9
10=10 <--- debería ser 00
11=11 <--- debería ser 01
12=12 <--- debería ser 02

Bueno pues después de hacer muuuuchos dolores de cabeza sólo hacia falta un toString() mejorado, un toString2():
Código PHP:
Number.prototype.toString2=function(b) {
    if( 
0<=this && this<) {
        
//caso directo, no hay que hacer nada, devuelve bien
        
res=(this).toString(b);
    }
    else {
        
//caso general
        //el ultimo se mantiene como se transformaria
        
var ultimo=(this).toString(b);
        
ultimo=ultimo[ultimo.length-1];
        
//los primeros (sean cuantos sean) se resuelven recursivamente, hasta llegar a un caso directo
        
var aConvertir=parseInt(this/b)-1;
        var 
primeros=(aConvertir).toString2(b);
        
res=primeros+ultimo;    //siendo primeros y ultimo strings
    
}
    return 
res;
}

for(var 
b=3a=0;a<500a++) {
    var 
c=(a).toString2(b);
    
document.writea+" --> "+c+"<br/>" );

Fijáos si era sencilla la solución (recursiva).
Bueno pues esas líneas para conseguir la recursión me han costado dos semanas.


Después de ésto, hallar la combinación número 124967 se hace con un método directo, sin tener que calcular las 124966 anteriores. Y todo esto lo aplicaremos a aquello de:
Código PHP:
var YOdevuelvo="abcdefghijklmnopqrstuvwxyz".split("");
var 
ELdevuelve="0123456789abcdefghijklmnop"
Para hallar la combinación número 124967 que forman las letras [abcdefghijklmnopqrstuvwxyz], así de sencillo.



Bueno, voy a dormir un rato, que el cuerpo me lo está pidiendo a voces....
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.

Última edición por derkenuke; 27/03/2007 a las 18:44 Razón: simplificación de código