{"id":1110,"date":"2025-05-13T10:53:53","date_gmt":"2025-05-13T13:53:53","guid":{"rendered":"http:\/\/aprendaprogramar.macae.ufrj.br\/?page_id=1110"},"modified":"2025-07-03T19:52:04","modified_gmt":"2025-07-03T22:52:04","slug":"associacao-apriori","status":"publish","type":"page","link":"https:\/\/aprendaprogramar.macae.ufrj.br\/index.php\/area-do-aluno\/associacao-apriori\/","title":{"rendered":"Associa\u00e7\u00e3o Apriori"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1110\" class=\"elementor elementor-1110\" data-elementor-settings=\"[]\">\n\t\t\t\t\t\t<div class=\"elementor-inner\">\n\t\t\t\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f5fc166 elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"f5fc166\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-508259f jltma-glass-effect-no\" data-id=\"508259f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-147e1f6 jltma-glass-effect-no elementor-widget elementor-widget-html\" data-id=\"147e1f6\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<html lang=\"pt-BR\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>Supermercado Apriori<\/title>\r\n    <link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@400;500;600;700&display=swap\">\r\n    <link rel=\"stylesheet\" href=\"styles.css\">\r\n<\/head>\r\n<body>\r\n    <!-- Tela de boas-vindas -->\r\n    <div id=\"welcome-screen\" class=\"container\">\r\n        <h1>Supermercado Apriori<\/h1>\r\n        <p>Uma experi\u00eancia interativa para aprender sobre o algoritmo Apriori<\/p>\r\n        <form id=\"welcome-form\">\r\n            <input type=\"text\" id=\"user-name\" placeholder=\"Digite seu nome\" required>\r\n            <button type=\"submit\">Come\u00e7ar experi\u00eancia<\/button>\r\n        <\/form>\r\n    <\/div>\r\n\r\n    <!-- Tela de compras -->\r\n    <div id=\"store-screen\" class=\"container\">\r\n        <h2 id=\"user-welcome\" class=\"user-welcome\"><\/h2>\r\n        \r\n        <!-- Se\u00e7\u00e3o: Frutas e Vegetais -->\r\n        <h3 class=\"section-title\">Frutas e Vegetais<\/h3>\r\n        <div class=\"products-grid\">\r\n            <div class=\"product-card\" data-product=\"ma\u00e7a\" data-category=\"frutas_vegetais\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/maca.webp\" alt=\"Ma\u00e7\u00e3\">\r\n                <h4>Ma\u00e7\u00e3<\/h4>\r\n            <\/div>\r\n            <div class=\"product-card\" data-product=\"banana\" data-category=\"frutas_vegetais\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/banana.webp\" alt=\"Banana\">\r\n                <h4>Banana<\/h4>\r\n            <\/div>\r\n            <div class=\"product-card\" data-product=\"tomate\" data-category=\"frutas_vegetais\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/tomate.webp\" alt=\"Tomate\">\r\n                <h4>Tomate<\/h4>\r\n            <\/div>\r\n        <\/div>\r\n        \r\n        <!-- Se\u00e7\u00e3o: Bebidas -->\r\n        <h3 class=\"section-title\">Bebidas<\/h3>\r\n        <div class=\"products-grid\">\r\n            <div class=\"product-card\" data-product=\"suco_laranja\" data-category=\"bebidas\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/sucolaranja.webp\" alt=\"Suco de Laranja\">\r\n                <h4>Suco de Laranja<\/h4>\r\n            <\/div>\r\n            <div class=\"product-card\" data-product=\"refrigerante\" data-category=\"bebidas\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/refrigerante.avif\" alt=\"Refrigerante\">\r\n                <h4>Refrigerante<\/h4>\r\n            <\/div>\r\n            <div class=\"product-card\" data-product=\"agua\" data-category=\"bebidas\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/agua.webp\" alt=\"\u00c1gua\">\r\n                <h4>\u00c1gua<\/h4>\r\n            <\/div>\r\n        <\/div>\r\n        \r\n        <!-- Se\u00e7\u00e3o: Latic\u00ednios -->\r\n        <h3 class=\"section-title\">Latic\u00ednios<\/h3>\r\n        <div class=\"products-grid\">\r\n            <div class=\"product-card\" data-product=\"queijo\" data-category=\"laticinios\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/queijo.webp\" alt=\"Queijo\">\r\n                <h4>Queijo<\/h4>\r\n            <\/div>\r\n            <div class=\"product-card\" data-product=\"iogurte\" data-category=\"laticinios\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/iogurte.webp\" alt=\"Iogurte\">\r\n                <h4>Iogurte<\/h4>\r\n            <\/div>\r\n            <div class=\"product-card\" data-product=\"manteiga\" data-category=\"laticinios\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/manteiga.webp\" alt=\"Manteiga\">\r\n                <h4>Manteiga<\/h4>\r\n            <\/div>\r\n        <\/div>\r\n        \r\n        <!-- Se\u00e7\u00e3o: Padaria -->\r\n        <h3 class=\"section-title\">Padaria<\/h3>\r\n        <div class=\"products-grid\">\r\n            <div class=\"product-card\" data-product=\"pao\" data-category=\"padaria\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/pao.webp\" alt=\"P\u00e3o\">\r\n                <h4>P\u00e3o<\/h4>\r\n            <\/div>\r\n            <div class=\"product-card\" data-product=\"bolo\" data-category=\"padaria\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/bolo.webp\" alt=\"Bolo\">\r\n                <h4>Bolo<\/h4>\r\n            <\/div>\r\n            <div class=\"product-card\" data-product=\"biscoito\" data-category=\"padaria\">\r\n                <img src=\"https:\/\/raw.githubusercontent.com\/lauraemmanuella\/educacaoIA\/refs\/heads\/main\/imagens\/biscoito.webp\" alt=\"Biscoito\">\r\n                <h4>Biscoito<\/h4>\r\n            <\/div>\r\n        <\/div>\r\n        \r\n        <button id=\"checkout-btn\" class=\"checkout-btn\">Finalizar Compra<\/button>\r\n    <\/div>\r\n    \r\n    <!-- Tela de an\u00e1lise Apriori -->\r\n    <div id=\"analysis-screen\" class=\"container\">\r\n        <h2>An\u00e1lise de Associa\u00e7\u00e3o - Algoritmo Apriori<\/h2>\r\n        <div id=\"analysis-results\" class=\"analysis-results\"><\/div>\r\n        <button id=\"quiz-btn\" class=\"quiz-btn\">Testar Conhecimento<\/button>\r\n    <\/div>\r\n    \r\n    <!-- Tela de Quiz -->\r\n    <div id=\"quiz-screen\" class=\"container\">\r\n        <h2>Quiz sobre Regras de Associa\u00e7\u00e3o<\/h2>\r\n        <div id=\"quiz-container\"><\/div>\r\n        <div id=\"quiz-results\"><\/div>\r\n        <!-- Bot\u00e3o de Nova Simula\u00e7\u00e3o foi removido daqui -->\r\n    <\/div>\r\n\r\n    <script>\r\n        \/\/ Vari\u00e1veis globais\r\nlet userName = '';\r\nlet transactions = [];\r\nlet currentTransaction = [];\r\nlet quizQuestions = [\r\n    {\r\n        question: \"1. Qual \u00e9 o principal objetivo das regras de associa\u00e7\u00e3o em aprendizado de m\u00e1quina?\",\r\n        options: [\r\n            \"A) Prever valores futuros com base em s\u00e9ries temporais\",\r\n            \"B) Encontrar rela\u00e7\u00f5es frequentes entre itens em grandes conjuntos de dados\",\r\n            \"C) Reduzir o n\u00famero de vari\u00e1veis em um modelo\",\r\n            \"D) Agrupar dados semelhantes em clusters\"\r\n        ],\r\n        correctAnswer: 1 \/\/ \u00cdndice B\r\n    },\r\n    {\r\n        question: \"2. Qual \u00e9 o objetivo da tarefa de associa\u00e7\u00e3o em um supermercado?\",\r\n        options: [\r\n            \"A) Determinar o melhor pre\u00e7o para cada produto\",\r\n            \"B) Prever o total de vendas no final do m\u00eas\",\r\n            \"C) Encontrar padr\u00f5es de compra entre os produtos adquiridos pelos clientes\",\r\n            \"D) Identificar fraudes nas transa\u00e7\u00f5es de pagamento\"\r\n        ],\r\n        correctAnswer: 2 \/\/ \u00cdndice C\r\n    },\r\n    {\r\n        question: \"3. O que acontece quando a confian\u00e7a de uma regra de associa\u00e7\u00e3o \u00e9 muito baixa?\",\r\n        options: [\r\n            \"A) A regra se torna mais forte e mais \u00fatil para recomenda\u00e7\u00f5es\",\r\n            \"B) A regra tem menos chance de ser \u00fatil, pois os produtos n\u00e3o s\u00e3o comprados frequentemente juntos\",\r\n            \"C) A regra pode ser aplicada automaticamente no supermercado\",\r\n            \"D) A regra se torna mais precisa para prever vendas futuras\"\r\n        ],\r\n        correctAnswer: 1 \/\/ \u00cdndice B\r\n    }\r\n];\r\n\r\n\/\/ Inicializa\u00e7\u00e3o\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n    \/\/ Formul\u00e1rio de boas-vindas\r\n    document.getElementById('welcome-form').addEventListener('submit', function(e) {\r\n        e.preventDefault();\r\n        userName = document.getElementById('user-name').value.trim();\r\n        if (userName) {\r\n            document.getElementById('welcome-screen').style.display = 'none';\r\n            document.getElementById('store-screen').style.display = 'block';\r\n            document.getElementById('user-welcome').textContent = `Bem-vindo(a), ${userName}! Selecione os produtos para sua compra.`;\r\n        }\r\n    });\r\n\r\n    \/\/ Eventos dos produtos\r\n    const productCards = document.querySelectorAll('.product-card');\r\n    productCards.forEach(card => {\r\n        card.addEventListener('click', function() {\r\n            this.classList.toggle('selected');\r\n            const product = this.getAttribute('data-product');\r\n            \r\n            if (this.classList.contains('selected')) {\r\n                if (!currentTransaction.includes(product)) {\r\n                    currentTransaction.push(product);\r\n                }\r\n            } else {\r\n                const index = currentTransaction.indexOf(product);\r\n                if (index > -1) {\r\n                    currentTransaction.splice(index, 1);\r\n                }\r\n            }\r\n        });\r\n    });\r\n\r\n    \/\/ Bot\u00e3o de finalizar compra\r\n    document.getElementById('checkout-btn').addEventListener('click', function() {\r\n        if (currentTransaction.length > 0) {\r\n            \/\/ Adicionar a transa\u00e7\u00e3o atual \u00e0 lista de transa\u00e7\u00f5es\r\n            transactions.push([...currentTransaction]);\r\n            \r\n            \/\/ Limpar sele\u00e7\u00e3o para pr\u00f3xima compra\r\n            productCards.forEach(card => {\r\n                card.classList.remove('selected');\r\n            });\r\n            \r\n            \/\/ Limpar transa\u00e7\u00e3o atual\r\n            currentTransaction = [];\r\n            \r\n            \/\/ Verificar se temos transa\u00e7\u00f5es suficientes para an\u00e1lise\r\n            if (transactions.length >= 3) {\r\n                const associationRules = aprioriAnalysis(transactions);\r\n                \r\n                if (associationRules.length > 0) {\r\n                    showAnalysisResults(transactions, associationRules);\r\n                    document.getElementById('store-screen').style.display = 'none';\r\n                    document.getElementById('analysis-screen').style.display = 'block';\r\n                } else {\r\n                    alert(\"N\u00e3o encontramos associa\u00e7\u00f5es significativas. Fa\u00e7a mais algumas compras!\");\r\n                }\r\n            } else {\r\n                const remainingTransactions = 3 - transactions.length;\r\n                alert(`Compra registrada! Voc\u00ea precisa fazer pelo menos mais ${remainingTransactions} compra(s) para an\u00e1lise.`);\r\n            }\r\n        } else {\r\n            alert(\"Por favor, selecione pelo menos um produto para sua compra.\");\r\n        }\r\n    });\r\n\r\n    \/\/ Bot\u00e3o para iniciar o quiz\r\n    document.getElementById('quiz-btn').addEventListener('click', function() {\r\n        initializeQuiz();\r\n        document.getElementById('analysis-screen').style.display = 'none';\r\n        document.getElementById('quiz-screen').style.display = 'block';\r\n    });\r\n\r\n    \/\/ Removido o event listener do bot\u00e3o 'restart-btn' pois o bot\u00e3o foi removido\r\n});\r\n\r\n\/\/ Fun\u00e7\u00e3o para analisar as transa\u00e7\u00f5es usando Apriori\r\nfunction aprioriAnalysis(transactions) {\r\n    \/\/ Passo 1: Encontrar todos os itens \u00fanicos\r\n    let uniqueItems = new Set();\r\n    transactions.forEach(transaction => {\r\n        transaction.forEach(item => {\r\n            uniqueItems.add(item);\r\n        });\r\n    });\r\n    uniqueItems = Array.from(uniqueItems);\r\n    \r\n    \/\/ Passo 2: Calcular suporte para cada item (1-itemsets)\r\n    const minSupport = 0.3; \/\/ Suporte m\u00ednimo de 30%\r\n    const totalTransactions = transactions.length;\r\n    \r\n    \/\/ Calcula suporte para 1-itemsets\r\n    let itemSupport = {};\r\n    uniqueItems.forEach(item => {\r\n        let count = 0;\r\n        transactions.forEach(transaction => {\r\n            if (transaction.includes(item)) {\r\n                count++;\r\n            }\r\n        });\r\n        const support = count \/ totalTransactions;\r\n        if (support >= minSupport) {\r\n            itemSupport[item] = support;\r\n        }\r\n    });\r\n    \r\n    \/\/ Itens frequentes (1-itemsets)\r\n    const frequentItems = Object.keys(itemSupport);\r\n    \r\n    \/\/ Passo 3: Gerar 2-itemsets frequentes\r\n    let itemPairSupport = {};\r\n    for (let i = 0; i < frequentItems.length; i++) {\r\n        for (let j = i + 1; j < frequentItems.length; j++) {\r\n            const item1 = frequentItems[i];\r\n            const item2 = frequentItems[j];\r\n            let count = 0;\r\n            \r\n            transactions.forEach(transaction => {\r\n                if (transaction.includes(item1) && transaction.includes(item2)) {\r\n                    count++;\r\n                }\r\n            });\r\n            \r\n            const support = count \/ totalTransactions;\r\n            if (support >= minSupport) {\r\n                itemPairSupport[`${item1},${item2}`] = support;\r\n            }\r\n        }\r\n    }\r\n    \r\n    \/\/ Passo 4: Gerar regras de associa\u00e7\u00e3o\r\n    const minConfidence = 0.5; \/\/ Confian\u00e7a m\u00ednima de 50%\r\n    let associationRules = [];\r\n    \r\n    \/\/ Para cada par frequente, gerar regras\r\n    Object.keys(itemPairSupport).forEach(pair => {\r\n        const items = pair.split(',');\r\n        const item1 = items[0];\r\n        const item2 = items[1];\r\n        \r\n        \/\/ Regra: item1 => item2\r\n        const confidence1 = itemPairSupport[pair] \/ itemSupport[item1];\r\n        if (confidence1 >= minConfidence) {\r\n            associationRules.push({\r\n                antecedent: item1,\r\n                consequent: item2,\r\n                support: itemPairSupport[pair],\r\n                confidence: confidence1\r\n            });\r\n        }\r\n        \r\n        \/\/ Regra: item2 => item1\r\n        const confidence2 = itemPairSupport[pair] \/ itemSupport[item2];\r\n        if (confidence2 >= minConfidence) {\r\n            associationRules.push({\r\n                antecedent: item2,\r\n                consequent: item1,\r\n                support: itemPairSupport[pair],\r\n                confidence: confidence2\r\n            });\r\n        }\r\n    });\r\n    \r\n    return associationRules;\r\n}\r\n\r\n\/\/ Fun\u00e7\u00e3o para exibir os resultados da an\u00e1lise (com porcentagens de probabilidade)\r\nfunction showAnalysisResults(transactions, associationRules) {\r\n    const resultsContainer = document.getElementById('analysis-results');\r\n    resultsContainer.innerHTML = '';\r\n    \r\n    \/\/ Mostrar hist\u00f3rico de compras\r\n    const historySection = document.createElement('div');\r\n    historySection.className = 'shopping-history';\r\n    \r\n    const historyTitle = document.createElement('h3');\r\n    historyTitle.className = 'history-title';\r\n    historyTitle.textContent = 'Hist\u00f3rico de Compras';\r\n    historySection.appendChild(historyTitle);\r\n    \r\n    transactions.forEach((transaction, index) => {\r\n        const transactionDiv = document.createElement('div');\r\n        transactionDiv.className = 'transaction';\r\n        transactionDiv.textContent = `Compra ${index + 1}: ${transaction.join(', ')}`;\r\n        historySection.appendChild(transactionDiv);\r\n    });\r\n    \r\n    resultsContainer.appendChild(historySection);\r\n    \r\n    \/\/ Mostrar regras de associa\u00e7\u00e3o\r\n    const rulesSection = document.createElement('div');\r\n    rulesSection.className = 'association-rules';\r\n    \r\n    const rulesTitle = document.createElement('h3');\r\n    rulesTitle.className = 'history-title';\r\n    rulesTitle.textContent = 'Regras de Associa\u00e7\u00e3o Encontradas';\r\n    rulesSection.appendChild(rulesTitle);\r\n    \r\n    if (associationRules.length === 0) {\r\n        const noRulesMsg = document.createElement('p');\r\n        noRulesMsg.textContent = 'N\u00e3o foram encontradas regras de associa\u00e7\u00e3o significativas.';\r\n        rulesSection.appendChild(noRulesMsg);\r\n    } else {\r\n        associationRules.forEach((rule, index) => {\r\n            const ruleDiv = document.createElement('div');\r\n            ruleDiv.className = 'association-rule';\r\n            \r\n            \/\/ Formatar os nomes dos produtos\r\n            const antecedentName = formatProductName(rule.antecedent);\r\n            const consequentName = formatProductName(rule.consequent);\r\n            \r\n            \/\/ Calcular porcentagem\r\n            const percentageConfidence = Math.round(rule.confidence * 100);\r\n            \r\n            \/\/ Exibir com porcentagem\r\n            ruleDiv.innerHTML = `\r\n                <strong>Associa\u00e7\u00e3o ${index + 1}:<\/strong> \r\n                Clientes que compram <strong>${antecedentName}<\/strong> \r\n                tamb\u00e9m tendem a comprar <strong>${consequentName}<\/strong> \r\n                com <strong>${percentageConfidence}%<\/strong> de probabilidade.\r\n            `;\r\n            rulesSection.appendChild(ruleDiv);\r\n        });\r\n        \r\n        \/\/ Adicionar exemplo espec\u00edfico de associa\u00e7\u00e3o (para fins de demonstra\u00e7\u00e3o)\r\n        \/\/ Isso ser\u00e1 exibido independentemente das regras reais encontradas\r\n        \r\n        \r\n        \/\/ Explica\u00e7\u00e3o simplificada\r\n        const explanationDiv = document.createElement('div');\r\n        explanationDiv.className = 'explanation';\r\n        explanationDiv.innerHTML = `\r\n            <p>As associa\u00e7\u00f5es acima foram identificadas pelo algoritmo Apriori com base \r\n            nas suas compras. A porcentagem indica a probabilidade do cliente comprar o \r\n            segundo produto quando compra o primeiro.<\/p>\r\n        `;\r\n        rulesSection.appendChild(explanationDiv);\r\n    }\r\n    \r\n    resultsContainer.appendChild(rulesSection);\r\n}\r\n\r\n\/\/ Fun\u00e7\u00e3o para formatar nome do produto\r\nfunction formatProductName(productId) {\r\n    \/\/ Converter ID do produto para nomes amig\u00e1veis\r\n    const productNames = {\r\n        'ma\u00e7a': 'Ma\u00e7\u00e3',\r\n        'banana': 'Banana',\r\n        'tomate': 'Tomate',\r\n        'suco_laranja': 'Suco de Laranja',\r\n        'refrigerante': 'Refrigerante',\r\n        'agua': '\u00c1gua',\r\n        'queijo': 'Queijo',\r\n        'iogurte': 'Iogurte',\r\n        'manteiga': 'Manteiga',\r\n        'pao': 'P\u00e3o',\r\n        'bolo': 'Bolo',\r\n        'biscoito': 'Biscoito'\r\n    };\r\n    \r\n    return productNames[productId] || productId;\r\n}\r\n\r\n\/\/ Fun\u00e7\u00e3o para inicializar o quiz\r\nfunction initializeQuiz() {\r\n    const quizContainer = document.getElementById('quiz-container');\r\n    quizContainer.innerHTML = '';\r\n    \r\n    quizQuestions.forEach((questionData, questionIndex) => {\r\n        const questionDiv = document.createElement('div');\r\n        questionDiv.className = 'quiz-question';\r\n        questionDiv.id = `question-${questionIndex}`;\r\n        \r\n        const questionTitle = document.createElement('h3');\r\n        questionTitle.textContent = questionData.question;\r\n        questionDiv.appendChild(questionTitle);\r\n        \r\n        const optionsDiv = document.createElement('div');\r\n        optionsDiv.className = 'quiz-options';\r\n        \r\n        questionData.options.forEach((option, optionIndex) => {\r\n            const optionButton = document.createElement('div');\r\n            optionButton.className = 'quiz-option';\r\n            optionButton.textContent = option;\r\n            optionButton.setAttribute('data-question', questionIndex);\r\n            optionButton.setAttribute('data-option', optionIndex);\r\n            \r\n            optionButton.addEventListener('click', function() {\r\n                \/\/ Remover sele\u00e7\u00e3o anterior\r\n                const questionOptions = document.querySelectorAll(`#question-${questionIndex} .quiz-option`);\r\n                questionOptions.forEach(opt => opt.classList.remove('selected'));\r\n                \r\n                \/\/ Adicionar sele\u00e7\u00e3o atual\r\n                this.classList.add('selected');\r\n            });\r\n            \r\n            optionsDiv.appendChild(optionButton);\r\n        });\r\n        \r\n        questionDiv.appendChild(optionsDiv);\r\n        quizContainer.appendChild(questionDiv);\r\n    });\r\n    \r\n    \/\/ Bot\u00e3o de submiss\u00e3o do quiz\r\n    const submitButton = document.createElement('button');\r\n    submitButton.className = 'submit-quiz';\r\n    submitButton.textContent = 'Verificar Respostas';\r\n    submitButton.addEventListener('click', evaluateQuiz);\r\n    \r\n    quizContainer.appendChild(submitButton);\r\n}\r\n\r\n\/\/ Fun\u00e7\u00e3o para avaliar as respostas do quiz\r\nfunction evaluateQuiz() {\r\n    let allAnswered = true;\r\n\r\n    quizQuestions.forEach((_, questionIndex) => {\r\n        const selectedOption = document.querySelector(`#question-${questionIndex} .quiz-option.selected`);\r\n        if (!selectedOption) {\r\n            allAnswered = false;\r\n        }\r\n    });\r\n\r\n    if (!allAnswered) {\r\n        alert(\"Por favor, responda todas as perguntas antes de enviar o quiz.\");\r\n        return; \/\/ Interrompe a execu\u00e7\u00e3o se nem todas foram respondidas\r\n    }\r\n\r\n    let correctAnswers = 0;\r\n    let totalQuestions = quizQuestions.length;\r\n\r\n    quizQuestions.forEach((questionData, questionIndex) => {\r\n        const selectedOption = document.querySelector(`#question-${questionIndex} .quiz-option.selected`);\r\n        const optionIndex = parseInt(selectedOption.getAttribute('data-option'));\r\n\r\n        if (optionIndex === questionData.correctAnswer) {\r\n            selectedOption.classList.add('correct');\r\n            correctAnswers++;\r\n        } else {\r\n            selectedOption.classList.add('incorrect');\r\n            const correctOption = document.querySelector(`#question-${questionIndex} .quiz-option[data-option=\"${questionData.correctAnswer}\"]`);\r\n            correctOption.classList.add('correct');\r\n        }\r\n    });\r\n\r\n    \/\/ Desabilita as op\u00e7\u00f5es ap\u00f3s envio\r\n    const allOptions = document.querySelectorAll('.quiz-option');\r\n    allOptions.forEach(option => {\r\n        option.style.pointerEvents = 'none';\r\n    });\r\n\r\n    \/\/ Exibe o resultado\r\n    const resultsDiv = document.getElementById('quiz-results');\r\n    const percentage = (correctAnswers \/ totalQuestions) * 100;\r\n    \r\n    resultsDiv.innerHTML = `\r\n        <h3>Sua pontua\u00e7\u00e3o: ${correctAnswers}\/${totalQuestions} (${percentage}%)<\/h3>\r\n        <div class=\"progress-bar\" style=\"background: linear-gradient(to right, #4776E6 0%, #8E54E9 ${percentage}%, #f0f4fe ${percentage}%, #f0f4fe 100%); height: 20px; border-radius: 10px; margin-top: 10px;\"><\/div>\r\n    `;\r\n\r\n    document.querySelector('.submit-quiz').style.display = 'none';\r\n}\r\n\r\n\r\n\/\/ Fun\u00e7\u00e3o resetSimulation foi mantida, mas n\u00e3o \u00e9 usada no c\u00f3digo atual\r\nfunction resetSimulation() {\r\n    \/\/ Limpar dados\r\n    userName = '';\r\n    transactions = [];\r\n    currentTransaction = [];\r\n    \r\n    \/\/ Limpar formul\u00e1rio de boas-vindas\r\n    document.getElementById('user-name').value = '';\r\n    \r\n    \/\/ Limpar sele\u00e7\u00f5es de produtos\r\n    const productCards = document.querySelectorAll('.product-card');\r\n    productCards.forEach(card => {\r\n        card.classList.remove('selected');\r\n    });\r\n    \r\n    \/\/ Limpar resultados do quiz\r\n    document.getElementById('quiz-results').innerHTML = '';\r\n    \r\n    \/\/ Limpar resultados da an\u00e1lise\r\n    document.getElementById('analysis-results').innerHTML = '';\r\n}\r\n    <\/script>\r\n<\/body>\r\n<\/html>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Supermercado Apriori Supermercado Apriori Uma experi\u00eancia interativa para aprender sobre o algoritmo Apriori Come\u00e7ar experi\u00eancia Frutas e Vegetais Ma\u00e7\u00e3 Banana Tomate Bebidas Suco de Laranja Refrigerante \u00c1gua Latic\u00ednios Queijo Iogurte Manteiga Padaria P\u00e3o Bolo Biscoito Finalizar Compra An\u00e1lise de Associa\u00e7\u00e3o &#8211; Algoritmo Apriori Testar Conhecimento Quiz sobre Regras de Associa\u00e7\u00e3o<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":132,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/aprendaprogramar.macae.ufrj.br\/index.php\/wp-json\/wp\/v2\/pages\/1110"}],"collection":[{"href":"https:\/\/aprendaprogramar.macae.ufrj.br\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aprendaprogramar.macae.ufrj.br\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aprendaprogramar.macae.ufrj.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aprendaprogramar.macae.ufrj.br\/index.php\/wp-json\/wp\/v2\/comments?post=1110"}],"version-history":[{"count":13,"href":"https:\/\/aprendaprogramar.macae.ufrj.br\/index.php\/wp-json\/wp\/v2\/pages\/1110\/revisions"}],"predecessor-version":[{"id":1185,"href":"https:\/\/aprendaprogramar.macae.ufrj.br\/index.php\/wp-json\/wp\/v2\/pages\/1110\/revisions\/1185"}],"up":[{"embeddable":true,"href":"https:\/\/aprendaprogramar.macae.ufrj.br\/index.php\/wp-json\/wp\/v2\/pages\/132"}],"wp:attachment":[{"href":"https:\/\/aprendaprogramar.macae.ufrj.br\/index.php\/wp-json\/wp\/v2\/media?parent=1110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}