Cita:
Iniciado por marlanga Pantalaimon, tu código funciona, ¿pero no has podido hacer algo más enrevesado aún? Si tu objetivo era que nadie pudiera copiarte, creo que lo has conseguido, a costa de marear la perdiz con operaciones no necesarias xd.
jaja, vaya. He implementado la estructura de un montículo binario( min heap o priority queue ) para luego extraer mínimos hasta llegar al tercero más pequeño. La gracia és que a partir de ese código es facil implementar uno general que halle el k-esimo menor en complejidad algorítmica O( n + k*log(n) )
Pero si gusta el código corto, esta fue mi primera idea:
Código Javascript
:
Ver originalfunction tercero( arr ) {
var x = new Object();
arr.forEach( function(e){ this[e] = 0; }, x );
return (x=Object.keys(x).sort()).length < 3 ? false : x[2];
}
¡Aunque veo que Panino5001 ha hecho un código aun más corto!
Cita:
Iniciado por marlanga Y ahora que lo pienso mejor, el código de Pantalaimon falla en alguno de esos casos, por ejemplo con
Cierto, modifico la función tercero para que funcione bien.
Código Javascript
:
Ver originalfunction tercero( arr ) {
arr.toHeap();
console.log( arr );
console.log( arr.length );
var n = 1;
do {
var value = arr[0];
console.log( arr );
console.log( arr.length );
arr.popMin();
if( arr.length == 0 ) return false;
else if( arr[0] != value ) ++n;
} while( n < 3 && arr.length > 0 );
return n < 3 ? false : arr[0];
}
PD.: Veo que tengo el mismo problema con [-3,-2,0,1]. Veo que tiene algo que ver con la conversión automática a tipo string. Pero parseInt() no me acaba de solventar el problema. Seguiré pensando.