|
<!DOCTYPE html> |
|
<html> |
|
|
|
<head> |
|
<style> |
|
pre { |
|
white-space: pre-wrap; |
|
|
|
word-break: break-word; |
|
|
|
background-color: #f4f4f4; |
|
|
|
padding: 2px; |
|
|
|
border-radius: 2px; |
|
|
|
border: 1px solid #ccc; |
|
|
|
} |
|
|
|
.container { |
|
display: flex; |
|
|
|
justify-content: space-between; |
|
|
|
margin-bottom: 10px; |
|
|
|
background-color: #ddd; |
|
|
|
} |
|
|
|
.sub-container { |
|
flex: 1; |
|
|
|
padding: 20px; |
|
|
|
background-color: #f4f4f4; |
|
|
|
border-radius: 2px; |
|
|
|
border: 1px solid #ccc; |
|
|
|
margin: 0 10px; |
|
|
|
} |
|
|
|
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; |
|
|
|
} |
|
|
|
.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; |
|
|
|
color: black !important; |
|
} |
|
|
|
.failed code.hljs { |
|
background-color: #ffe6e6 !important; |
|
|
|
color: black !important; |
|
} |
|
|
|
.solution { |
|
display: none; |
|
|
|
} |
|
|
|
.solution.active { |
|
display: block; |
|
|
|
} |
|
|
|
.button-container { |
|
text-align: center; |
|
|
|
margin-top: 20px; |
|
|
|
} |
|
|
|
.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> |
|
|
|
document.addEventListener('DOMContentLoaded', function () { |
|
|
|
var checkboxes = document.querySelectorAll('.model-checkbox'); |
|
|
|
|
|
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'; |
|
} |
|
}); |
|
|
|
|
|
|
|
|
|
checkboxes.forEach(function (checkbox) { |
|
checkbox.addEventListener('change', function () { |
|
|
|
var model = this.id.replace('checkbox-', ''); |
|
|
|
|
|
var modelElement = document.getElementById('code-' + model); |
|
|
|
|
|
modelElement.style.display = this.checked ? 'block' : 'none'; |
|
|
|
|
|
checkboxes.forEach(function (cb) { |
|
var modelId = cb.id.replace('checkbox-', ''); |
|
localStorage.setItem('checkbox-' + modelId, cb.checked); |
|
}); |
|
|
|
}); |
|
}); |
|
}); |
|
</script> |
|
</head> |
|
|
|
<body> |
|
<h1><a href="{{ question['url'] }}">Problem {{ problem_idx }}</a></h1> |
|
|
|
|
|
<div class="button-container"> |
|
{% set next_problem_idx = problem_idx + 1 %} |
|
<a href="{{ url_for('problem_mini', problem_idx=next_problem_idx) }}" class="other-button">Next Problem</a> |
|
|
|
{% set prev_problem_idx = problem_idx - 1 %} |
|
<a href="{{ url_for('problem_mini', 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(); |
|
var problemIndex = document.getElementById('problemInput').value; |
|
var baseUrl = "{{ url_for('problem_mini', problem_idx=0) }}"; |
|
var newUrl = baseUrl.replace('0', problemIndex); |
|
window.location.href = newUrl; |
|
}); |
|
</script> |
|
<br /> |
|
<br /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<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'); |
|
|
|
|
|
allModels.forEach(function (model) { |
|
|
|
var solutions = model.querySelectorAll('.solution'); |
|
var totalSolutions = solutions.length; |
|
var currentIndex = 0; |
|
|
|
|
|
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 () { |
|
|
|
currentIndex = (currentIndex - 1 + totalSolutions) % totalSolutions; |
|
updateActiveSolution(currentIndex); |
|
}); |
|
|
|
model.querySelector('.next-solution').addEventListener('click', function () { |
|
|
|
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); |
|
|
|
var codeElement = document.getElementById('code-' + currentModel); |
|
if (codeElement) { |
|
codeElement.style.display = 'block'; |
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
</script> |
|
|
|
</body> |
|
|
|
</html> |