Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Duda sobre el Sorteo de Libros

Alguien de pronto entendió este ejercicio? "Contexto: Imagina que eres una persona desarrolladora que trabaja para Buscante, una importante tienda en línea de libros. Tu jefe te ha pedido que crees una función para sortear libros a los clientes. El sorteo debe hacerse de manera que todos los libros tengan la oportunidad de ser sorteados al menos una vez, y después de eso, el sorteo debe comenzar de nuevo. Recordaste la lección sobre la adición de la variable "numeroLimite" en el curso "Lógica de programación: explore funciones y listas". ¿Cómo implementarás el sorteo del libro teniendo en cuenta lo que se enseñó?"
Se muestra que la opción correcta es la segunda, pero no entiendo por qué?
¿Por qué se suma +1 al numeroLimite en la segunda linea?

function sortearLibro() {
let libroElegido = parseInt(Math.random() * numeroLimite + 1);
let cantidadDeLibrosSorteados = listaDeLibrosSorteados.length;
if (cantidadDeLibrosSorteados == numeroLimite) {
listaDeLibrosSorteados = [];
}
// Código omitido
}

2 respuestas

Hola

A mi tambien me costo entender, incluso a la primera no entendi por que ese codigo era el correcto. Entre de nuevo para darte una respuesta por el tema y aproveche de crear un codigo mas interactivo, le agregue lo que faltaba por lo que puedes probar tu. El html esta sin css asi que es bien "feo". Copia el codigo y pasalo a tu VS Code, desde el html en el vscode presiona alt. +b para que lo abra tu navegador y alli haz las pruebas.
Codigo HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button onclick="sortearLibro('resultado')">Prueba</button>
    <p id="resultado"><br></p> <!--su id pasa a la funcion para luego actualizar el p-->
    <script src="prueba.js"></script>
</body>
</html>

Codigo JS, recuerda crear el archivo js como prueba.js o renombralo en html:

//Contexto: Imagina que eres una persona desarrolladora que trabaja para Buscante, una importante tienda en línea de libros. 
//Tu jefe te ha pedido que crees una función para sortear libros a los clientes. El sorteo debe hacerse de manera que todos los 
//libros tengan la oportunidad de ser sorteados al menos una vez, y después de eso, el sorteo debe comenzar de nuevo. 
//Recordaste la lección sobre la adición de la variable "numeroLimite" en el curso "Lógica de programación: explore funciones y 
//listas". ¿Cómo implementarás el sorteo del libro teniendo en cuenta lo que se enseñó?

//NAeeE = No Aparece en el Ejercicio

function sortearLibro(idParragraph) {
    let libroElegido = parseInt(Math.random() * numeroLimite + 1);//se asigna un valor random multiplicandolo por 3 y dandole tipo int
    let cantidadDeLibrosSorteados = listaDeLibrosSorteados.length;//asigna a cantidadDeLibrosSorteados el largo de libros sorteados, comenzara en 0
    if (cantidadDeLibrosSorteados == numeroLimite) {//si cantidadDeLibrosSorteados alcanza el numero limite
        listaDeLibrosSorteados = [];//borrara la lista, en caso contrario continua
        elemento=document.getElementById(idParragraph);//toma el id del parragraph del html <p> NAeeE
        elemento.innerHTML='Se han alcanzado los 3 sorteos, la lista listaDeLibrosSorteados se deja vacia, su valor es: '+listaDeLibrosSorteados+'<br> como puedes ver, esta vacia. Volver a presionar Prueba reiniciara el sorteo'//le escribe los resultados de las variables NAeeE
    }
    //Código omitido
    else {//else que indica que hacer si aun no se supera el limite. NAeeE
        let libroSorteado=listaDeLibros[libroElegido-1];//busca en listaDeLibro con el indice obtenido de Math.random  y lo asigna a libroSorteado, a la variable del indice le resta uno para evitar indice 3 que no existe. NAeeE
        if (listaDeLibrosSorteados.includes(libroSorteado)){//si el libroSorteado ya esta en listaDeLibrosSorteados hace recursividad. NAeeE
            sortearLibro(idParragraph);//recursividad llamando a la misma funcion para hacer un loop. NAeeE
        }
        else {//si no esta el libroSorteado dentro de listaDeLibrosSorteados. NAeeE
            listaDeLibrosSorteados.push(libroSorteado);//lo agrega a esta lista para evitar que vuelva a ser sorteado el mismo. NAeeE
            elemento=document.getElementById(idParragraph);//toma el id del parragraph del html <p> NAeeE
            elemento.innerHTML='el valor de idParrafraph es: '+idParragraph+'<br>'+//le escribe los resultados de las variables NAeeE
            'el resultado de Math.random es: '+libroElegido+'<br>'+'el resultado de listaDeLibros[libroElegido-1] es: '+listaDeLibros[libroElegido-1]+'<br>'+
            'el resultado de listaDeLibrosSorteados.length es: '+listaDeLibrosSorteados.length+'<br>'+'la lista listaDeLibrosSorteados contiene: '+listaDeLibrosSorteados
        }
    }

}

listaDeLibrosSorteados=[];//lista de libros que han sido sorteados. Comienza vacia y se poblara con cada sorteo
listaDeLibros=["Señor de los anillos","Harry Potter PF","Receta cocina"];//lista de libros a sortear. NAeeE
numeroLimite=listaDeLibros.length;//establece el numero limite igual al largo de los libros por sortear, en este caso 3

Estaba analizando bien lo que dijiste y claro, ese +1 al parecer esta demas. Al probar sin el +1 queda perfecto para el indice sin tener que despues restarle ese 1. Quizas quedo de la primera vez con los 10 numeros del juego ya que si no le sumas 1 existe la posibilidad que salga 0 el que no se pide y que no llegue nunca a 10 ya que queda como tope 9