<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Combined Quiz</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
            padding: 20px;
            background-color: #f7f7f7;
            color: #333;
        }
        .quiz-container {
            max-width: 600px;
            margin: auto;
            background: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
        }
        .question {
            margin-bottom: 20px;
        }
        .question h2 {
            margin: 0 0 10px;
        }
        .options {
            list-style: none;
            padding: 0;
        }
        .options li {
            margin: 10px 0;
        }
        button {
            background: #007bff;
            color: #fff;
            padding: 10px 15px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        }
        button:hover {
            background: #0056b3;
        }
        .result {
            margin-top: 20px;
            padding: 10px;
            background: #e9ffe9;
            border: 1px solid #b5d6b5;
            border-radius: 5px;
            color: #2c662d;
        }
        .feedback {
            margin-top: 10px;
            padding: 10px;
            background: #f9f9f9;
            border: 1px solid #ddd;
            border-radius: 5px;
        }
        .correct {
            color: green;
        }
        .incorrect {
            color: red;
        }
        .timer {
            font-size: 1.2em;
            margin-bottom: 20px;
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="quiz-container">
        <h1>Combined Quiz</h1>
        <div id="timer" class="timer">Time left: 20:00</div>
        <div id="quiz">
            <!-- Questions will be dynamically injected here -->
        </div>
        <button id="submit" disabled>Submit</button>
        <div id="result" class="result" style="display: none;"></div>
    </div>

    <script>
        const questions = [
            {
                question: "Ποια είναι η βασική αρχή λειτουργίας μιας στοίβας;",
                options: ["FIFO", "LIFO", "Τυχαία Πρόσβαση", "Κυκλική"],
                answer: "LIFO"
            },
            {
                question: "Ποια είναι η λειτουργία που προσθέτει ένα στοιχείο στη στοίβα;",
                options: ["ΑΠΩΘΗΣΗ", "ΩΘΗΣΗ", "ΕΞΑΓΩΓΗ", "ΑΠΩΘΗΣΗ"],
                answer: "ΩΘΗΣΗ"
            },
            {
                question: "Τι κάνει η λειτουργία ΑΠΩΘΗΣΗ;",
                options: [
                    "Προσθέτει ένα στοιχείο στην κορυφή της στοίβας",
                    "Αφαιρεί το στοιχείο από την κορυφή της στοίβας",
                    "Αφαιρεί όλα τα στοιχεία",
                    "Πρόσβαση στο τελευταίο στοιχείο"
                ],
                answer: "Αφαιρεί το στοιχείο από την κορυφή της στοίβας"
            },
            {
                question: "Ποια είναι η αρχική τιμή του δείκτη μιας άδειας στοίβας;",
                options: ["0", "-1", "1", "Μη Ορισμένο"],
                answer: "0"
            },
            {
                question: "Τι συμβαίνει όταν προσπαθείτε να κάνετε ΩΘΗΣΗ σε γεμάτη στοίβα;",
                options: [
                    "Υπερχείλιση Στοίβας",
                    "Υποχείλιση Στοίβας",
                    "Το στοιχείο αγνοείται",
                    "Τίποτα από τα παραπάνω"
                ],
                answer: "Υπερχείλιση Στοίβας"
            },
            {
                question: "Πώς ελέγχετε αν μια στοίβα είναι άδεια;",
                options: [
                    "Ελέγξτε αν ο δείκτης στοίβας είναι -1",
                    "Ελέγξτε αν ο δείκτης στοίβας είναι 0",
                    "Ελέγξτε αν ο δείκτης στοίβας είναι ίσος με το μέγεθος της στοίβας",
                    "Τίποτα από τα παραπάνω"
                ],
                answer: "Ελέγξτε αν ο δείκτης στοίβας είναι 0"
            },
            {
                question: "Με ποια σειρά προσπελάζονται τα στοιχεία σε μια μη κενή στοίβα;",
                options: [
                    "Από τη βάση προς την κορυφή",
                    "Από την κορυφή προς τη βάση",
                    "Τυχαία",
                    "Καμία από τις παραπάνω"
                ],
                answer: "Από την κορυφή προς τη βάση"
            },
            {
                question: "Ποιο είναι το μέγιστο μέγεθος μιας στοίβας που ορίζεται με πίνακα μεγέθους Ν;",
                options: ["N", "N-1", "N+1", "Κανένα"],
                answer: "N"
            },
            {
                question: "Παράδειγμα 1  Ώθηση & Απώθηση στοιχείου σε στοίβα. 1) Σε μια στοίβα 10 θέσεων έχουν τοποθετηθεί διαδοχικά τα στοιχεία: Σ, Γ, Μ, Α, Δ στην 1η, 2η, 3η, 4η και 5η θέση αντίστοιχα.  Αν εφαρμόσετε τις παρακάτω λειτουργίες: Απώθηση, Απώθηση, Απώθηση, Ώθηση Χ, Ώθηση Δ και Απώθηση,  ποια είναι η τελική μορφή της στοίβας (ΑΠΟ ΚΑΤΩ ΠΡΟΣ ΤΑ ΠΑΝΩ);",
                options: ["ΧΓΣΜ", "ΣΓΜΧ", "ΣΜΓΧ", "ΧΜΓΣ"],
                answer: "ΣΓΜΧ"
            },
            {
                question: "Ποια είναι η βασική αρχή λειτουργίας μιας ουράς;",
                options: ["FIFO", "LIFO", "Τυχαία Πρόσβαση", "Κυκλική"],
                answer: "FIFO"
            },
            {
                question: "Ποια είναι η λειτουργία που προσθέτει ένα στοιχείο στην ουρά;",
                options: ["Push", "Pop", "Enqueue", "Dequeue"],
                answer: "Enqueue"
            },
            {
                question: "Τι κάνει η λειτουργία dequeue;",
                options: [
                    "Προσθέτει ένα στοιχείο στο τέλος της ουράς",
                    "Αφαιρεί το στοιχείο από την αρχή της ουράς",
                    "Αφαιρεί όλα τα στοιχεία",
                    "Πρόσβαση στο τελευταίο στοιχείο"
                ],
                answer: "Αφαιρεί το στοιχείο από την αρχή της ουράς"
            },
            {
                question: "Ποια είναι η αρχική τιμή του δείκτη μιας άδειας ουράς;",
                options: ["0", "-1", "1", "Μη Ορισμένο"],
                answer: "0"
            },
            {
                question: "Τι συμβαίνει όταν προσπαθείτε να κάνετε enqueue σε γεμάτη ουρά;",
                options: [
                    "Υπερχείλιση Ουράς",
                    "Υποχείλιση Ουράς",
                    "Το στοιχείο αγνοείται",
                    "Τίποτα από τα παραπάνω"
                ],
                answer: "Υπερχείλιση Ουράς"
            },
            {
                question: "Ποιος κώδικας βρίσκει πόσα στοιχεία υπάρχουν σε μια μη άδεια ουρά;",
                options: [
                    "πλ <- εμπρος - πισω",
                    "πλ <- εμπρος - πισω+1",
                    "πλ <- πισω - εμπρος",
                    "πλ <- πισω - εμπρος+1"
                ],
                answer: "πλ <- πισω - εμπρος+1"
            },
            {
                question: "Ποια συνθηκη εξεταζει αν μια μη άδεια ουρά έχει ένα στοιχείο;",
                options: [
                    "Αν εμπρος = πισω + 1",
                    "Αν εμπρος = πισω - 1",
                    "Αν εμπρος = πισω",
                    "Αν εμπρος = πισω + 2"
                ],
                answer: "Αν εμπρος = πισω"
            },
            {
                question: "Ποιος κώδικας υλοποιεί την εισαγωγή σε ουρά;",
                options: [
                    "ΔΙΑΒΑΣΕ στοιχείο\nΑΝ rear = 10 ΤΟΤΕ\nΓΡΑΨΕ 'Γεμάτη ουρά'\nΑΛΛΙΩΣ_ΑΝ (front = 0 ΚΑΙ rear = 0) ΤΟΤΕ\nfront <- 1\nrear <- 1\nA[front] <- στοιχείο\nΑΛΛΙΩΣ\nrear <- rear + 1\nA[rear] <- στοιχείο\nΤΕΛΟΣ_ΑΝ",
                    "ΔΙΑΒΑΣΕ στοιχείο\nΑΝ rear = 10 ΤΟΤΕ\nΓΡΑΨΕ 'Γεμάτη ουρά'\nΑΛΛΙΩΣ_ΑΝ (front = 0 ΚΑΙ rear = 0) ΤΟΤΕ\nfront <- 1\nrear <- 1\nA[rear] <- στοιχείο\nΑΛΛΙΩΣ\nrear <- rear + 1\nA[rear] <- στοιχείο\nΤΕΛΟΣ_ΑΝ",
                    "ΔΙΑΒΑΣΕ στοιχείο\nΑΝ rear = 10 ΤΟΤΕ\nΓΡΑΨΕ 'Γεμάτη ουρά'\nΑΛΛΙΩΣ_ΑΝ (front = 0 ΚΑΙ rear = 0) ΤΟΤΕ\nfront <- 1\nrear <- 1\nA[rear] <- στοιχείο\nΑΛΛΙΩΣ\nfront <- front + 1\nA[rear] <- στοιχείο\nΤΕΛΟΣ_ΑΝ",
                    "ΔΙΑΒΑΣΕ στοιχείο\nΑΝ rear = 10 ΤΟΤΕ\nΓΡΑΨΕ 'Γεμάτη ουρά'\nΑΛΛΙΩΣ_ΑΝ (front = 0 ΚΑΙ rear = 0) ΤΟΤΕ\nfront <- 1\nrear <- 1\nA[rear] <- στοιχείο\nΑΛΛΙΩΣ\nrear <- rear + 1\nA[front] <- στοιχείο\nΤΕΛΟΣ_ΑΝ"
                ],
                answer: "ΔΙΑΒΑΣΕ στοιχείο\nΑΝ rear = 10 ΤΟΤΕ\nΓΡΑΨΕ 'Γεμάτη ουρά'\nΑΛΛΙΩΣ_ΑΝ (front = 0 ΚΑΙ rear = 0) ΤΟΤΕ\nfront <- 1\nrear <- 1\nA[rear] <- στοιχείο\nΑΛΛΙΩΣ\nrear <- rear + 1\nA[rear] <- στοιχείο\nΤΕΛΟΣ_ΑΝ"
            },
            {
                question: "Ποιος κώδικας υλοποιεί την εξαγωγή από ουρά;",
                options: [
                    "ΑΝ (front = 0 KAI rear = 0) ΤΟΤΕ\nΓΡΑΨΕ 'Άδεια ουρά'\nΑΛΛΙΩΣ ΑΝ (front = rear ) ΤΟΤΕ\nfront <- 0\nrear <- 0\nΑΛΛΙΩΣ\nΓΡΑΨΕ 'Εισάγεται το στοιχείο:',A[front]\nfront <- front + 1\nΤΕΛΟΣ_ΑΝ\n",
                    "ΑΝ (front = 0 KAI rear = 0) ΤΟΤΕ\nΓΡΑΨΕ 'Άδεια ουρά'\nΑΛΛΙΩΣ ΑΝ (front = rear ) ΤΟΤΕ\nfront <- 0\nrear <- 0\nΑΛΛΙΩΣ\nΓΡΑΨΕ 'Εξάγεται το στοιχείο:',A[front]\nrear <- rear + 1\nΤΕΛΟΣ_ΑΝ\n",
                    "ΑΝ (front = rear ) ΤΟΤΕ\nΓΡΑΨΕ 'Άδεια ουρά'\nΑΛΛΙΩΣ ΑΝ (front = rear ) ΤΟΤΕ\nfront <- 0\nrear <- 0\nΑΛΛΙΩΣ\nΓΡΑΨΕ 'Εξάγεται το στοιχείο:',A[front]\nfront <- front + 1\nΤΕΛΟΣ_ΑΝ\n",
                    "ΑΝ (front = 0 KAI rear = 0) ΤΟΤΕ\nΓΡΑΨΕ 'Άδεια ουρά'\nΑΛΛΙΩΣ ΑΝ (front = rear ) ΤΟΤΕ\nfront <- 0\nrear <- 0\nΑΛΛΙΩΣ\nΓΡΑΨΕ 'Εξάγεται το στοιχείο:',A[front]\nfront <- front + 1\nΤΕΛΟΣ_ΑΝ\n"
                ],
                answer: "ΑΝ (front = 0 KAI rear = 0) ΤΟΤΕ\nΓΡΑΨΕ 'Άδεια ουρά'\nΑΛΛΙΩΣ ΑΝ (front = rear ) ΤΟΤΕ\nfront <- 0\nrear <- 0\nΑΛΛΙΩΣ\nΓΡΑΨΕ 'Εξάγεται το στοιχείο:',A[front]\nfront <- front + 1\nΤΕΛΟΣ_ΑΝ\n"
            }
        ];

        const quizContainer = document.getElementById("quiz");
        const submitButton = document.getElementById("submit");
        const resultContainer = document.getElementById("result");
        const timerElement = document.getElementById("timer");

        let timeLeft = 20 * 60; // 20 minutes in seconds

        function startTimer() {
            const timerInterval = setInterval(() => {
                const minutes = Math.floor(timeLeft / 60);
                const seconds = timeLeft % 60;
                timerElement.textContent = `Time left: ${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
                timeLeft--;

                if (timeLeft < 0) {
                    clearInterval(timerInterval);
                    calculateResult();
                    submitButton.disabled = true;
                }
            }, 1000);
        }

        function loadQuiz() {
            questions.forEach((q, index) => {
                const questionElement = document.createElement("div");
                questionElement.className = "question";

                questionElement.innerHTML = `
                    <h2>Ερώτηση ${index + 1}: ${q.question}</h2>
                    <ul class="options">
                        ${q.options
                            .map(
                                (option, i) => `
                            <li>
                                <label>
                                    <input type="radio" name="question${index}" value="${option}">
                                    ${option}
                                </label>
                            </li>
                        `
                            )
                            .join("")}
                    </ul>
                `;
                quizContainer.appendChild(questionElement);
            });
        }

        function calculateResult() {
            let score = 0;
            resultContainer.innerHTML = ''; // Clear previous results
            questions.forEach((q, index) => {
                const selectedOption = document.querySelector(
                    `input[name="question${index}"]:checked`
                );
                const feedbackElement = document.createElement("div");
                feedbackElement.className = "feedback";
                if (selectedOption && selectedOption.value === q.answer) {
                    if (index >= questions.length - 2) {
                        score += 2; // Last two questions are worth 2 points each
                    } else {
                        score += 1; // All other questions are worth 1 point each
                    }
                    feedbackElement.innerHTML = `Ερώτηση ${index + 1}: <span class="correct">Σωστό!</span>`;
                } else {
                    feedbackElement.innerHTML = `Ερώτηση ${index + 1}: <span class="incorrect">Λάθος.</span> Η σωστή απάντηση είναι: ${q.answer}`;
                }
                resultContainer.appendChild(feedbackElement);
            });
            resultContainer.innerHTML += `<p>Το συνολικό σκορ σας είναι: ${score} / 20</p>`;
            resultContainer.style.display = 'block';
        }

        function enableSubmitButton() {
            const allQuestionsAnswered = questions.every((q, index) => {
                return document.querySelector(`input[name="question${index}"]:checked`);
            });
            submitButton.disabled = !allQuestionsAnswered;
        }

        loadQuiz();
        startTimer();

        quizContainer.addEventListener('change', enableSubmitButton);
        submitButton.addEventListener('click', calculateResult);
    </script>
</body>
</html>