Ver Mensaje Individual
  #12 (permalink)  
Antiguo 14/12/2013, 12:40
Pantaláimon
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Propuesta para desafíos javascript 2014

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 original
  1. function tercero( arr ) {
  2.     var x = new Object();
  3.     arr.forEach( function(e){ this[e] = 0; }, x );
  4.     return (x=Object.keys(x).sort()).length < 3 ? false : x[2];
  5. }
¡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 original
  1. function tercero( arr ) {
  2.     arr.toHeap();
  3.     console.log( arr );
  4.     console.log( arr.length );
  5.     var n = 1;
  6.     do {
  7.         var value = arr[0];
  8.         console.log( arr );
  9.         console.log( arr.length );
  10.         arr.popMin();
  11.         if( arr.length == 0 ) return false;
  12.         else if( arr[0] != value )     ++n;
  13.     } while( n < 3 && arr.length > 0 );
  14.  
  15.     return n < 3 ? false : arr[0];
  16. }

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.

Última edición por Pantaláimon; 14/12/2013 a las 12:57