Les comparto mis soluciones a dos de los desafíos presentados. Me parece que algunos tienen punto de mejora, ya que los if anidados, siento que pueden causar errores, con el escalamiento del código. Primero les comparto una función que hice para poder generar listas de números:
let cantidadNumeros = 0;
cantidadNumeros = parseInt(prompt('¿Cúantos números desea que tenga la lista? : '));
function generadorListaNumeros(longitud){
let k = 0;
let lista = [];
while(k < longitud) {
lista.push(Math.floor(Math.random()*(longitud+1)));
k++
}
return lista;
}
listaNumeros = generadorListaNumeros(cantidadNumeros);
Cómo pueden observar un código muy simple, pero que ahorra tiempo, para la resolución de estos desafíos. En cuanto a los desafíos que me parecieron interesantes, son el número 7 y el número 9. Mis soluciones respectivamente fueron las siguientes:
//Desafio 7
/*
* Crea una función que muestre en la consola el número más grande y el número más pequeño en una lista.
*/
function maxMini(lista){
let k = 0;
let max = lista[k];
let min = lista[k];
let longitud = lista.length;
console.log("Iniciamos con max igual a: ", max, "Iniciamos con min igual a: ",min);
k++;
while(k < longitud ){
if(max <= lista[k]){
max = lista[k];
console.log("Maximo Momentaneo",max, "Contador",k);
k++;
} else {
if(min >= lista[k]){
min = lista[k];
console.log("Mínimo Momentaneo", min, "Contador",k);
k++;
} else {
min = min;
k++;
}
}
}
return console.log('El máximo es: ', max, 'el mínimo es: ', min);
}
maxMini(listaNumeros);
Claramente, podemos remover los console.log()
, ya que sólo fueron una ayuda visual, sin embargo siento que la solución carece de elegancia, parece que martille el problema hasta solucionarlo, sobre todo la parte de los if else
anidados. ¿No se si alguien encontró una solución mas optima y que evite el anidamiento de condicionales?.
En cuanto al desafío 9, mi solución fue la siguiente:
let lookUp = parseInt(prompt('Ingrese un entero que desee buscar: '));
function buscarArreglo(lista, numero) {
let k=0;
let longitud = lista.length;
let flag = 0;
while(k < longitud){
if(lista[k] == numero){
flag = k;
break;
} else{
if(k == (longitud-1) ){
flag = -1;
break;
} else{
k++;
}
}
}
return flag;
}
console.log(buscarArreglo(listaNumeros, lookUp));
Nuevamente use condicionales anidados, que con problemas más complejos no creo que sea óptimo. Además se comporta como un vlookup
de excel, ya que en el momento que encuentra el número, sólo nos dará la primera posición de este, pero en caso de encontrarse repetido, no nos devolverá el resto de las posiciones.
Si alguien encuentra un punto de mejora, me encantaría verlo, o una solución más elegante. De antemano muchas gracias por su tiempo.