<!DOCTYPE html> <html> <head> <style> pre { white-space: pre-wrap; /* Wraps the text */ word-break: break-word; /* Ensures words break to prevent overflow */ background-color: #f4f4f4; /* Light grey background */ padding: 2px; /* Padding around the text */ border-radius: 2px; /* Rounded corners */ border: 1px solid #ccc; /* Light grey border */ } .container { display: flex; /* Use flexbox to layout children */ justify-content: space-between; /* Space between the children */ margin-bottom: 10px; /* Space between each container */ background-color: #ddd; /* Debug: background color */ } .sub-container { flex: 1; /* Each sub-container takes equal width */ padding: 20px; /* Padding inside each sub-container */ background-color: #f4f4f4; /* Background color */ border-radius: 2px; /* Rounded corners */ border: 1px solid #ccc; /* Border */ margin: 0 10px; /* Margin between sub-containers */ } body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f4f4f4; } #checkboxes { margin-bottom: 20px; } .model-checkbox+label { margin-right: 10px; padding: 5px 10px; background-color: #e7e7e7; border-radius: 5px; cursor: pointer; user-select: none; } .model-checkbox { display: none; /* Hide the default checkbox */ } .model-checkbox:checked+label { background-color: #d0e6a5; color: #0b4d03; } .model { border: 1px solid black; padding: 10px; } .counter { margin-top: 20px; } .passed code.hljs { background-color: #e6ffe6 !important; /* light green */ color: black !important; } .failed code.hljs { background-color: #ffe6e6 !important; /* light red */ color: black !important; } .solution { display: none; /* Hide all solutions by default */ } .solution.active { display: block; /* Only show the active solution */ } .button-container { text-align: center; /* Center the button container */ margin-top: 20px; /* Add some space above the button */ } .other-button { display: inline-block; padding: 10px 20px; background-color: #BBBBBB; color: white; text-decoration: none; border-radius: 5px; font-weight: bold; } .other-button:hover { background-color: #0056b3; } </style> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.2/styles/default.min.css"> <script> // Wait for the DOM to be fully loaded document.addEventListener('DOMContentLoaded', function () { // Get all checkboxes with the class 'model-checkbox' var checkboxes = document.querySelectorAll('.model-checkbox'); // Load the checkbox states from localStorage and apply them checkboxes.forEach(function (checkbox) { var model = checkbox.id.replace('checkbox-', ''); var savedState = localStorage.getItem('checkbox-' + model); if (savedState !== null) { checkbox.checked = savedState === 'true'; var modelElement = document.getElementById('code-' + model); modelElement.style.display = checkbox.checked ? 'block' : 'none'; } }); // Add a change event listener to each checkbox checkboxes.forEach(function (checkbox) { checkbox.addEventListener('change', function () { // Get the model name from the checkbox ID var model = this.id.replace('checkbox-', ''); // Get the model element var modelElement = document.getElementById('code-' + model); // toggle the display of the model element modelElement.style.display = this.checked ? 'block' : 'none'; // Save the state of all checkboxes to localStorage checkboxes.forEach(function (cb) { var modelId = cb.id.replace('checkbox-', ''); localStorage.setItem('checkbox-' + modelId, cb.checked); }); }); }); }); </script> </head> <body> <h1>Problem {{ problem_idx }}</h1> <div class="button-container"> {% set next_problem_idx = problem_idx + 1 %} <a href="{{ url_for('problem', problem_idx=next_problem_idx) }}" class="other-button">Next Problem</a> {% set prev_problem_idx = problem_idx - 1 %} <a href="{{ url_for('problem', problem_idx=prev_problem_idx) }}" class="other-button">Prev Problem</a> <form id="jumpToProblemForm" method="GET"> <input type="number" id="problemInput" name="problem_idx" placeholder="Enter problem number" required> <button type="submit">Go</button> </form> </div> <script> document.getElementById('jumpToProblemForm').addEventListener('submit', function (event) { event.preventDefault(); // Prevent the form from submitting normally var problemIndex = document.getElementById('problemInput').value; var baseUrl = "{{ url_for('problem', problem_idx=0) }}"; // Generate the base URL with a placeholder var newUrl = baseUrl.replace('0', problemIndex); // Replace the placeholder with the actual index window.location.href = newUrl; // Redirect to the new URL }); </script> <br /> <br /> <!-- <div id="checkboxes"> {% for model in models %} <input type="checkbox" class="model-checkbox" id="checkbox-{{ model }}" checked> <label for="checkbox-{{ model }}">{{ model }}@{{ evaluation[model]['correctness'] }}/{{ evaluation[model]['performance'] }}</label> {% endfor %} </div> --> <div class="container"> <div class="sub-container"> <h3>{{ question['question_title'] }} || {{ question['difficulty'] }} || {{ question['contest_date'].split('T')[0]}}</h3> <pre overflow="auto"> {{ question['question_content'] }} </pre> </div> <div class="sub-container"> <select id="model-select" class="model-select"> {% for model in models %} <option value="{{ model }}">{{ model }}@{{ evaluation[model]['correctness'] }}</option> {% endfor %} </select> <div id="all-results"> {% for model in models %} <div class="model" id="code-{{ model }}" style="display: none;"> <h2> {{ model }}</h2> <button data-model="{{ model }}" class="prev-solution">Previous</button> <button data-model="{{ model }}" class="next-solution">Next</button> <div class="solutions-container"> {% for code in data[model] %} <div class="solution{% if loop.first %} active{% endif %}" id="solution-{{ loop.index }}"> <ul> <li> solution idx -- {{ loop.index }} </li> <li>correctness -- {{ code['pass1'] }}</li> </ul> <div> <pre class="{{ 'passed' if code['pass1'] else 'failed' }}"><code class="language-python">{{ code['code'] }}</code></pre> </div> </div> {% endfor %} </div> </div> {% endfor %} </div> </div> </div> </div> <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.2/highlight.min.js"></script> <script>hljs.highlightAll();</script> <script> document.addEventListener('DOMContentLoaded', function () { var allModels = document.querySelectorAll('.model'); // console.log(allModels); allModels.forEach(function (model) { // console.log(model); var solutions = model.querySelectorAll('.solution'); var totalSolutions = solutions.length; var currentIndex = 0; // console.log(totalSolutions, currentIndex); function updateActiveSolution(index) { solutions.forEach(function (solution, i) { if (i === index) { solution.classList.add('active'); } else { solution.classList.remove('active'); } }); } model.querySelector('.prev-solution').addEventListener('click', function () { // console.log(currentIndex, model); currentIndex = (currentIndex - 1 + totalSolutions) % totalSolutions; updateActiveSolution(currentIndex); }); model.querySelector('.next-solution').addEventListener('click', function () { // console.log(currentIndex, model); currentIndex = (currentIndex + 1) % totalSolutions; updateActiveSolution(currentIndex); }); }); }); </script> <script> document.addEventListener('DOMContentLoaded', function () { var modelSelect = document.getElementById('model-select'); var models = document.querySelectorAll('.model'); modelSelect.addEventListener('change', function () { var selectedModel = this.value; models.forEach(function (model) { if (model.id === 'code-' + selectedModel) { model.style.display = 'block'; } else { model.style.display = 'none'; } }); console.log(localStorage.getItem('lcbviz-currentModel')); localStorage.setItem('lcbviz-currentModel', this.value); console.log(localStorage.getItem('lcbviz-currentModel')); }); var currentModel = localStorage.getItem('lcbviz-currentModel'); currentModel = currentModel || 'GPT-4-Turbo-2024-04-09'; modelSelect.value = currentModel; localStorage.setItem('lcbviz-currentModel', currentModel); // Display the corresponding code element var codeElement = document.getElementById('code-' + currentModel); if (codeElement) { codeElement.style.display = 'block'; } // Add an event listener to save the selected model to local storage when it changes }); </script> </body> </html>