Ejercicio

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Visitantes</title>
    <link rel="stylesheet" href="css/estilos.css">
    <!-- Latest compiled and minified CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">

<!-- Latest compiled JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
    <div class="container-fluid ">
        <div class="row">
            <div class="col">
                <h1 class="display-3 ">Control de visitantes</h1>
                <button id="add" class="btn btn-success ">Añadir visitante</button>
                <div class="form-check">
                    <input class="form-check-input" type="checkbox" id="reutilizar" name="reutilizar" value="something" checked>
                    <label class="form-check-label" for="reutilizar">Reutilizar números</label>
                  </div>
            </div>
        </div>
        <div class="row">
            <div class="col">
                <h1 class="display-4 ">Visitantes</h1>
                <div id="visitantes"></div>
            </div>
            <div class="col">
                <h1 class="display-4 ">Histórico</h1>
                <div id="historico"></div>
            </div>
        </div>
    </div>
    <script src="js/script.js"></script>
</body>
</html>
.numero{
    display: inline-block;
    border:2px solid blue;
    padding: 5px;
    min-width: 2em;
    font-size: 2em;
    text-align: center;
    font-weight: bold;
    margin: 10px;
}
estado = {}

window.onload = function () {
    estado.lista = [];
    estado.historico = [];
    estado.actual = 1;
    estado.limite = 20;
    estado.add = document.getElementById("add");
    estado.add.addEventListener("click", addVisitante);
    estado.visitantes = document.getElementById("visitantes");
    estado.historicos = document.getElementById("historico");
    estado.reutilizar = document.getElementById("reutilizar");
    iniciar();
}
function iniciar() {
    pintarLista();
}
function addVisitante() {
    if (estado.reutilizar.checked) {
        // Buscar el primer elemento libre de la lista
        let numero = 1;
        while (estado.lista.includes(numero)) {
            numero++;
        }
        estado.lista.push(numero);
        estado.lista.sort((a,b)=>a-b)
    } else {
        estado.lista.push(estado.actual);
        estado.actual++;
    }


    pintarLista();
}
function checkAdd() {
    if (estado.lista.length <= estado.limite) {
        estado.add.classList.remove("disabled")
    } else {
        estado.add.classList.add("disabled")
    }
}
function pintarLista() {
    checkAdd();
    pintarDatos(estado.lista, estado.visitantes);
    pintarDatos(estado.historico, estado.historicos);
}
function pincharCaja() {
    let numero = Number(this.innerHTML);
    estado.historico = estado.historico.concat(estado.lista.filter(x => x == numero))
    if (estado.historico.length>estado.limite){
        estado.historico=estado.historico.slice(-estado.limite);
    }
    estado.lista = estado.lista.filter(x => x != numero);

    pintarLista();
}
function esPrimo(numero){
    for(let i=2;i<=Math.sqrt(numero);i++){
        if (numero%i==0){
            return false;
        }
    }
    return true;
}
function pintarDatos(datos, destino) {

    destino.innerHTML = ""
    for (let elemento of datos) {
        let caja = document.createElement("div");
        caja.innerHTML = elemento;
        caja.classList.add("numero");
        if (esPrimo(elemento)){
            caja.classList.add("bg-warning");
        }
        caja.addEventListener("click", pincharCaja);
        destino.append(caja)
    }
}

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos