Construye un proyecto de una caja registradora - Build a Cash Register

Cuéntanos qué está pasando:

Hola, hice el proyecto 4 veces, pero no pasa, yo hice todas las prueba y funciona, pero el problema es que no pasa.

Tu código hasta el momento

<!-- file: index.html -->

/* file: script.js */

/* file: styles.css */

Información de tu navegador:

El agente de usuario es: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36

Información del Desafío:

Construye un proyecto de una caja registradora - Build a Cash Register

Please copy your code into the post. Thanks

Caja Registradora /* Estilos básicos para la interfaz de usuario */ body { font-family: Arial, sans-serif; display: flex; justify-content: center; align-items: center; min-height: 100vh; background-color: #f4f4f4; margin: 0; }
    .container {
        background-color: #fff;
        padding: 30px;
        border-radius: 8px;
        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
        text-align: center;
        width: 350px;
    }

    h1 {
        color: #333;
        margin-bottom: 20px;
    }

    .input-group {
        margin-bottom: 15px;
        text-align: left;
    }

    label {
        display: block;
        margin-bottom: 5px;
        font-weight: bold;
        color: #555;
    }

    input[type="number"] {
        width: calc(100% - 20px);
        padding: 10px;
        border: 1px solid #ddd;
        border-radius: 4px;
        font-size: 16px;
    }

    #item-price {
        font-weight: bold;
        color: #007bff;
    }

    button {
        background-color: #007bff;
        color: white;
        padding: 12px 20px;
        border: none;
        border-radius: 5px;
        cursor: pointer;
        font-size: 16px;
        margin-top: 10px;
        transition: background-color 0.3s ease;
    }

    button:hover {
        background-color: #0056b3;
    }

    #change-due {
        margin-top: 25px;
        padding: 15px;
        background-color: #e9ecef;
        border-radius: 4px;
        text-align: left;
        font-size: 1.1em;
        color: #333;
        border: 1px solid #dee2e6;
    }
</style>

Caja Registradora

Precio del artículo:
Efectivo del cliente:
Comprar
<script>
    // Variables iniciales: precio del artículo y efectivo en caja (CID)
    let price = 19.5; // Puedes cambiar este valor para probar diferentes escenarios
    let cid = [
        ["PENNY", 1.01],
        ["NICKEL", 2.05],
        ["DIME", 3.1],
        ["QUARTER", 4.25],
        ["ONE", 90],
        ["FIVE", 55],
        ["TEN", 20],
        ["TWENTY", 60],
        ["ONE HUNDRED", 100]
    ]; // Array bidimensional de la moneda disponible en la caja

    // Objeto para mapear los nombres de las monedas a sus valores numéricos
    const currencyValues = {
        "PENNY": 0.01,
        "NICKEL": 0.05,
        "DIME": 0.1,
        "QUARTER": 0.25,
        "ONE": 1,
        "FIVE": 5,
        "TEN": 10,
        "TWENTY": 20,
        "ONE HUNDRED": 100
    };

    // Referencias a los elementos del DOM
    const cashInput = document.getElementById("cash");
    const purchaseBtn = document.getElementById("purchase-btn");
    const changeDueDiv = document.getElementById("change-due");
    const itemPriceSpan = document.getElementById("item-price");

    // Muestra el precio inicial del artículo al cargar la página
    itemPriceSpan.textContent = `$${price}`;

    // Agrega un "event listener" al botón de compra
    purchaseBtn.addEventListener("click", () => {
        const cash = parseFloat(cashInput.value); // Obtiene el efectivo proporcionado por el cliente

        // Comprueba si el cliente no tiene suficiente dinero
        if (cash < price) {
            alert("Customer does not have enough money to purchase the item");
            return; // Detiene la ejecución si el efectivo es insuficiente
        }

        // Comprueba si el cliente pagó con la cantidad exacta
        if (cash === price) {
            changeDueDiv.textContent = "No change due - customer paid with exact cash";
            return; // Detiene la ejecución si no hay cambio que devolver
        }

        // Si hay cambio que devolver, llama a la función para calcularlo
        calculateChange(cash);
    });

    /**
     * Calcula el cambio a devolver al cliente.
     * @param {number} cashProvided - La cantidad de efectivo entregada por el cliente.
     */
    function calculateChange(cashProvided) {
        let changeDue = cashProvided - price; // Calcula la cantidad de cambio adeudado
        let totalCID = cid.reduce((sum, [, amount]) => sum + amount, 0); // Suma el total de efectivo en la caja

        // Redondea los valores a dos decimales para evitar problemas de precisión con coma flotante
        changeDue = Math.round(changeDue * 100) / 100;
        totalCID = Math.round(totalCID * 100) / 100;

        const change = []; // Array para almacenar las denominaciones de cambio a devolver
        let status = ""; // Variable para el estado de la caja registradora

        // Determina el estado inicial de la caja
        if (totalCID < changeDue) {
            status = "Status: INSUFFICIENT_FUNDS";
        } else if (totalCID === changeDue) {
            status = "Status: CLOSED";
        } else {
            status = "Status: OPEN";
        }

        // Si los fondos son insuficientes desde el inicio, muestra el mensaje y sale
        if (status === "Status: INSUFFICIENT_FUNDS") {
            changeDueDiv.textContent = status;
            return;
        }

        // Intenta devolver el cambio, iterando desde las denominaciones más grandes a las más pequeñas
        const cidReversed = [...cid].reverse(); // Crea una copia y la revierte

        for (let i = 0; i < cidReversed.length; i++) {
            let [currencyName, availableAmount] = cidReversed[i]; // Obtiene el nombre y la cantidad disponible de la moneda
            const currencyValue = currencyValues[currencyName]; // Obtiene el valor de la denominación
            let amountToReturn = 0; // Cantidad de esta denominación que se va a devolver

            // Mientras haya cambio por devolver y haya suficiente de esta denominación en caja
            while (changeDue >= currencyValue && availableAmount >= currencyValue) {
                amountToReturn += currencyValue; // Añade el valor de la moneda al total a devolver
                changeDue = Math.round((changeDue - currencyValue) * 100) / 100; // Reduce el cambio adeudado
                availableAmount = Math.round((availableAmount - currencyValue) * 100) / 100; // Reduce la cantidad disponible en caja
            }

            // Si se devolvió algo de esta denominación, la añade al array de cambio
            if (amountToReturn > 0) {
                change.push([currencyName, amountToReturn]);
            }
        }

        // Después de intentar dar el cambio, si aún queda cambio por devolver, significa que no se pudo dar el cambio exacto
        if (changeDue > 0) {
            status = "Status: INSUFFICIENT_FUNDS";
            changeDueDiv.textContent = status;
            return;
        }

        // Construye la cadena de texto con las denominaciones del cambio
        const changeString = change.map(([name, amount]) => `${name}: $${amount}`).join(" ");

        // Actualiza el elemento change-due con el estado y el detalle del cambio
        if (status === "Status: CLOSED") {
            changeDueDiv.textContent = `${status} ${changeString}`;
        } else { // Status: OPEN
            changeDueDiv.textContent = `${status} ${changeString}`;
        }
    }
</script>

a mi ese codigo tambien me tira error, pero nose que me estaria faltando?..