Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

la mia fue mejor xd

//Variables
let numeroSecreto = 0;
let numeroUsuario = 0;
let intentos = 1;
//let palabraVeces = 'vez';
let maximosIntentos = 0;
let numeroMáximo =0;
//numeroMáximo= parseInt(prompt("Quieres adivinar un numero entre 1 y ..?"))

while (numeroMáximo<1 || isNaN(numeroMáximo)){
numeroMáximo= parseInt(prompt("Quieres adivinar un numero entre 1 y ..?"));
console.log(numeroMáximo);
console.log(typeof(numeroMáximo));

if (isNaN(numeroMáximo)|| numeroMáximo==0){
alert("Disculpe, debe ingresar un numero mayor que 0");
}

}
while (maximosIntentos==0 || isNaN(maximosIntentos)){
maximosIntentos = parseInt(prompt("En cuantos intentos?"));

if (isNaN(maximosIntentos) || maximosIntentos==0){
    alert ("Disculpe, debe ser un numero mayor que 0");
}
}

numeroSecreto = Math.floor(Math.random()*numeroMáximo)+1; 
if (numeroMáximo>0){
while (numeroUsuario != numeroSecreto) {
    numeroUsuario = parseInt(prompt("Me indicas un número entre 1 y " +numeroMáximo + " por favor:"));
    console.log(numeroUsuario);
    console.log(typeof(numeroUsuario));
    if (numeroUsuario == numeroSecreto) {
        //Acertamos, fue verdadera la condición
        alert(`Acertaste, el número es: ${numeroUsuario}. Lo hiciste en ${intentos} ${intentos == 1 ? 'vez' : 'veces' }`);
    } else {
        if (numeroUsuario > numeroSecreto) {
            alert('El número secreto es menor');
        } else {
            alert('El número secreto es mayor');
        }
        //Incrementamos el contador cuando no acierta
        //intentos = intentos + 1;
        //intentos += 1;
        intentos++;

        //palabraVeces = 'veces';
        if (intentos > maximosIntentos) {
            alert(`Llegaste al número máximo de ${maximosIntentos} intentos`);
            break;
        }
        //La condición no se cumplió
        //alert('Lo siento, no acertaste el número');
    }
}
}
3 respuestas
solución!

Hola Adrian, recuerda que no existe una sola solución, ni una solución correcta, cada programador puede llegar al mismo resultado pero con diferente enfoque. Si bien tu código agrega ciertas validaciones que son excelentes para evitar errores, el código pudiera ser modificado para reducir un poco las líneas de código.

// Variables
let numeroUsuario = 0;
let intentos = 1;
let maximosIntentos = 0;
let numeroMaximo = 0;

while (numeroMaximo < 1 || isNaN(numeroMaximo)) {
    numeroMaximo = parseInt(prompt("Quieres adivinar un numero entre 1 y ..?"));
    console.log(numeroMaximo);
    console.log(typeof (numeroMaximo));

    if (isNaN(numeroMaximo) || numeroMaximo < 1) {
        alert("Disculpe, debe ingresar un numero mayor que 0");
    }

}
while (maximosIntentos < 1 || isNaN(maximosIntentos)) {
    maximosIntentos = parseInt(prompt("En cuantos intentos?"));

    if (isNaN(maximosIntentos) || maximosIntentos < 1) {
        alert("Disculpe, debe ser un numero mayor que 0");
    }
}

let numeroSecreto = Math.floor(Math.random() * numeroMaximo) + 1;
while ((numeroUsuario !== numeroSecreto) && intentos <= maximosIntentos) {
    numeroUsuario = parseInt(prompt("Me indicas un número entre 1 y " + numeroMaximo + " por favor:"));
    console.log(numeroUsuario);
    console.log(typeof (numeroUsuario));
    if (numeroUsuario === numeroSecreto) {
        //Acertamos, fue verdadera la condición
        alert(`Acertaste, el número es: ${numeroUsuario}. Lo hiciste en ${intentos} ${intentos === 1 ? 'vez' : 'veces'}`);
    } else {
        if (numeroUsuario > numeroSecreto) {
            alert('El número secreto es menor');
        } else {
            alert('El número secreto es mayor');
        }

        // Validar el número de intentos realizados
        if (intentos === maximosIntentos) {
            alert(`Llegaste al número máximo de ${maximosIntentos} intentos`);
        }

        //Incrementamos el contador cuando no acierta
        intentos++;
    }
}

Toma en cuenta las siguientes observaciones:

  • La validación de los primeros dos if puede ser la misma ya que lo que quieres lograr es lo mismo, obtener un número entero positivo mayor a cero.
  • En tu código la sentencia if del tercer ciclo while no es necesaria ya que anteriormente te cercioraste de que numeroMáximo sea un entero positivo mayor a cero.
  • La variable numeroMáximo tiene un acento en la letra a, no es recomedable utilizar carácteres no ingléses en el código (como letras con acento, carácteres de otros alfabetos como el chino, etc). Si bien JS puede y está preparado para permitir carácteres unicode, no es una práctica muy realizada debido a que el inglés suele ser mejor en cuanto a legibilidad pensando en una audiencia global. Sí que los puedes usar en los comentarios, pero no es recomendable hacerlo en el código fuente, como en los nombres de variables en este caso.
  • Como recomendación, siempre es una buena práctica eliminar código que no se utiliza.
  • La condición del ciclo while puede cambiar a la propuesta y con eso te ahorras utilizar el break;. Claro, tienes que hacer las modificaciones adecuadas.
  • Otra recomendación que haría, es eliminar los console.log(), si bien es una recomendación hacer uso de ellos, en especial durante la fase de desarrollo, no es estrictamente necesario utilizar este método.
  • Adicionalmente, recuerda siempre indentar tu código para mejorar su legibilidad.

Como podrás darte cuenta, las recomendaciones anteriores fueron hechas desde mi punto de vista y alguien más podrá diferir de mí o incluso estar de acuerdo conmigo, lo que te quiero dar a entender es que nadie tiene la verdad absoluta y siempre es bueno tener distintos puntos de vista, eso te será de utilidad en tus futuros trabajos de programación.

ufff bro!! claro claro tienes razón! entiendo y veo lo que dices estoy completamente de acuerdo contigo, incluso sin ir muy lejos a buscar una tercera opinion yo mismo ya soy capaz de ver ciertas cosas que podrian mejorarse! por ejemplo.

    /* cambiar esto
    
    if (numeroUsuario === numeroSecreto) {
        //Acertamos, fue verdadera la condición
        alert(`Acertaste, el número es: ${numeroUsuario}. Lo hiciste en ${intentos} ${intentos === 1 ? 'vez' : 'veces'}`);
    }
        if (numeroUsuario > numeroSecreto) {
            alert('El número secreto es menor');
        } else {
            alert('El número secreto es mayor');
        }*/
        
    // por esto 
    
    if (numeroUsuario === numeroSecreto) {
        //Acertamos, fue verdadera la condición
        alert(`Acertaste, el número es: ${numeroUsuario}. Lo hiciste en ${intentos} ${intentos === 1 ? 'vez' : 'veces'}`);
    }
    
    else {  alert (` el numero secreto es ${ numeroSecreto< numeroUsuario ?" menor" : "mayor"}`)
    }
        

y estoy seguro que si en un futuro vuelvo a ver este código tendré más ideas para optimizarlo xd, así que entiendo completamente lo que dices y aprecio mucho tus palabras amigo!

mucha linea de codigo pero si es más optimo bro, bien ahí