Aquí la solución freak:
Código Javascript
:
Ver originalfunction baileHungaro( bailarines, primero, ultimo ) {
if( ultimo - primero > 0 ) {
console.log( 'EMPIEZA EL BAILE ' + primero + '-' + ultimo );
var sombrero = new Sombrero( bailarines, primero, ultimo );
sombrero.asignarSombrero( 'negro' , primero);
sombrero.asignarSombrero( 'granate', ultimo );
while( sombrero.negro.sigueBailando() ) {
sombrero.negro.baila();
sombrero.granate.baila();
if( sombrero.negro.parejaAdecuada( sombrero.granate ) ) {
sombrero.negro.seCruzaCon( sombrero.granate );
} else {
sombrero.granate.volverAlSitio();
}
sombrero.granate.pasaSombrero();
}
baileHungaro( bailarines, primero, sombrero.negro.posicion-1 );
baileHungaro( bailarines, sombrero.negro.posicion+1, ultimo );
}
}
Esta es la función principal que la he hecho para que al leerla recuerde a los movimientos que hacen los bailarines en el video. Aquí la versión entera:
http://jsfiddle.net/jefebrondem/pTmpV/
Y luego recordaba de memoria una versión en Haskell de quickSort que era muy bella por lo corta que se podía expresar :
Que en Javascript se transforma en un código desagradable de leer:
http://jsfiddle.net/jefebrondem/93qkp/
Usaré la segunda para el concurso de eficiencia aunque en ninguno de los dos casos la he buscado.
Un saludo!