Update checker sample
This commit is contained in:
parent
df1b721968
commit
cd5672abf0
3 changed files with 48 additions and 49 deletions
|
@ -6,5 +6,5 @@ register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def highlight(code, language):
|
def highlight(code, language, linenos=True):
|
||||||
return highlight_code(code, language)
|
return highlight_code(code, language, linenos)
|
||||||
|
|
|
@ -1,27 +1,17 @@
|
||||||
{% extends "base.html" %}
|
{% extends "common-content.html" %}
|
||||||
{% block body %}
|
{% block description %}
|
||||||
<style>
|
<style>
|
||||||
article {
|
article {
|
||||||
padding: 2.5em 3.5em;
|
padding: 2.5em 3.5em;
|
||||||
font-size: 1.1em;
|
font-size: 1.1em;
|
||||||
}
|
}
|
||||||
.code2 {
|
|
||||||
color: #333333;
|
|
||||||
background-color: #f7f7f7;
|
|
||||||
font-family: Consolas;
|
|
||||||
line-height: 1.45;
|
|
||||||
}
|
|
||||||
.code2 {
|
|
||||||
padding: 1em;
|
|
||||||
}
|
|
||||||
li {
|
li {
|
||||||
padding: 0.2em;
|
padding: 0.2em;
|
||||||
}
|
}
|
||||||
|
#content-right {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<article id="py">
|
<article id="py">
|
||||||
<h2>1. Custom checker (PY)</h2>
|
<h2>1. Custom checker (PY)</h2>
|
||||||
<hr>
|
<hr>
|
||||||
|
@ -29,9 +19,11 @@
|
||||||
Đây là checker mặc định của website, cho phép người dùng cập nhật được nhiều thông tin nhất (chi tiết xem ở bên dưới). Chúng ta cần hoàn thành hàm check dưới đây:
|
Đây là checker mặc định của website, cho phép người dùng cập nhật được nhiều thông tin nhất (chi tiết xem ở bên dưới). Chúng ta cần hoàn thành hàm check dưới đây:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="code2">
|
{{
|
||||||
|
"""
|
||||||
def check(process_output, judge_output, **kwargs):
|
def check(process_output, judge_output, **kwargs):
|
||||||
# return True/False</pre>
|
# return True/False
|
||||||
|
"""|highlight('py')}}
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Trong đó, <code>**kwargs</code> có thể chứa các biến sau:
|
Trong đó, <code>**kwargs</code> có thể chứa các biến sau:
|
||||||
|
@ -47,15 +39,16 @@ def check(process_output, judge_output, **kwargs):
|
||||||
<li><code>execution_time:</code> thời gian chạy</li>
|
<li><code>execution_time:</code> thời gian chạy</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2>Return: </h2>
|
<h2>Return: </h2>
|
||||||
<ol>
|
<ul>
|
||||||
<li>Cách 1: Trả về True/False</li>
|
<li>Cách 1: Trả về True/False</li>
|
||||||
<li>Cách 2: Trả về một object <code>CheckerResult</code> có thể được gọi như sau <pre class="code2">CheckerResult(case_passed_bool, points_awarded, feedback='')</pre></li>
|
<li>Cách 2: Trả về một object <code>CheckerResult</code> có thể được gọi như sau <pre class="code2">CheckerResult(case_passed_bool, points_awarded, feedback='')</pre></li>
|
||||||
</ol>
|
</ul>
|
||||||
|
|
||||||
<h2>Ví dụ: </h2>
|
<h2>Ví dụ: </h2>
|
||||||
<p>Dưới đây là ví dụ cho bài toán: Input gồm 1 số nguyên n. In ra 2 số nguyên a, b sao cho a + b = n.
|
<p>Dưới đây là ví dụ cho bài toán: Input gồm 1 số nguyên n. In ra 2 số nguyên a, b sao cho a + b = n.
|
||||||
</p>
|
</p>
|
||||||
<pre class="code2">
|
{{
|
||||||
|
"""
|
||||||
from dmoj.result import CheckerResult
|
from dmoj.result import CheckerResult
|
||||||
|
|
||||||
|
|
||||||
|
@ -82,7 +75,8 @@ def check(process_output, judge_output, judge_input, **kwargs):
|
||||||
|
|
||||||
if (n == a + b):
|
if (n == a + b):
|
||||||
return True
|
return True
|
||||||
return wa('a + b != n')</pre>
|
return wa('a + b != n')
|
||||||
|
"""| highlight('py')}}
|
||||||
</article>
|
</article>
|
||||||
<article id="cpp">
|
<article id="cpp">
|
||||||
<h2>2. Custom validator (CPP)</h2>
|
<h2>2. Custom validator (CPP)</h2>
|
||||||
|
@ -110,8 +104,9 @@ main.exe [input_file] [output_file] [ans_file]</pre>
|
||||||
<h2>Ví dụ: </h2>
|
<h2>Ví dụ: </h2>
|
||||||
<p>Chương trình sau dùng để chấm bài toán: Cho n là một số nguyên dương. In ra hai số tự nhiên a, b sao cho a + b = n. </p>
|
<p>Chương trình sau dùng để chấm bài toán: Cho n là một số nguyên dương. In ra hai số tự nhiên a, b sao cho a + b = n. </p>
|
||||||
<p>Nếu in ra a + b = n và a, b >= 0 thì được 100% số điểm, nếu a + b = n nhưng một trong 2 số a, b âm thì được 50% số điểm. </p>
|
<p>Nếu in ra a + b = n và a, b >= 0 thì được 100% số điểm, nếu a + b = n nhưng một trong 2 số a, b âm thì được 50% số điểm. </p>
|
||||||
<pre class="code2">
|
{{
|
||||||
#include <bits/stdc++.h>
|
"""
|
||||||
|
#include <bits/stdc++.h>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
|
@ -121,12 +116,12 @@ int main(int argc, char** argv) {
|
||||||
|
|
||||||
int n, a, b, c, d;
|
int n, a, b, c, d;
|
||||||
|
|
||||||
inp >> n;
|
inp >> n;
|
||||||
out >> a >> b;
|
out >> a >> b;
|
||||||
ans >> c >> d;
|
ans >> c >> d;
|
||||||
|
|
||||||
if (a + b == c + d) {
|
if (a + b == c + d) {
|
||||||
cout << a << " + " << b << " = " << c << " + " << d << endl;
|
cout << a << \" + \" << b << \" = \" << c << \" + \" << d << endl;
|
||||||
|
|
||||||
if (a >= 0 && b >= 0) {
|
if (a >= 0 && b >= 0) {
|
||||||
return 0; // AC
|
return 0; // AC
|
||||||
|
@ -137,20 +132,22 @@ int main(int argc, char** argv) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cout << "a + b = " << a + b << " != " << n << endl;
|
cout << \"a + b = \" << a + b << \" != \" << n << endl;
|
||||||
return 1; // WA
|
return 1; // WA
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</pre>
|
""" | highlight('cpp')}}
|
||||||
|
</article>
|
||||||
|
<article id="interactive">
|
||||||
<h2>3. Interactive (CPP)</h2>
|
<h2>3. Interactive (CPP)</h2>
|
||||||
<hr>
|
<hr>
|
||||||
<p>
|
<p>
|
||||||
Để sử dụng chức năng này, cần viết một chương trình C++ pass vào 1 argument <code>input_file</code> tương ứng file input.
|
Để sử dụng chức năng này, cần viết một chương trình C++ pass vào 2 arguments <code>input_file</code> <code>answer_file</code> tương ứng file input và đáp án (nếu cần thiết).
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Để test chương trình trên máy tính với tư cách thí sinh, có thể dùng lệnh như sau (Windows):
|
Để test chương trình trên máy tính với tư cách thí sinh, có thể dùng lệnh như sau (Windows):
|
||||||
<pre class="code2">
|
<pre class="code2">
|
||||||
main.exe [input_file]</pre>
|
main.exe [input_file] [answer_file]</pre>
|
||||||
hoặc thay bằng <code>./main</code> trên Linux/MacOS.
|
hoặc thay bằng <code>./main</code> trên Linux/MacOS.
|
||||||
</p>
|
</p>
|
||||||
<h2>Return: </h2>
|
<h2>Return: </h2>
|
||||||
|
@ -159,14 +156,16 @@ main.exe [input_file]</pre>
|
||||||
<ul>
|
<ul>
|
||||||
<li> 0 nếu AC (100% điểm)</li>
|
<li> 0 nếu AC (100% điểm)</li>
|
||||||
<li> 1 nếu WA (0 điểm)</li>
|
<li> 1 nếu WA (0 điểm)</li>
|
||||||
|
<li> 2 nếu điểm thành phần. Khi đó cần in ra stderr một số thực trong đoạn [0, 1] thể hiện cho tỷ lệ điểm. Nếu điểm < 1 thì hiển thị WA, điểm = 1 thì hiển thị AC. </li>
|
||||||
</ul>
|
</ul>
|
||||||
Thông tin được in ra trong stderr (bằng cerr) sẽ là feedback hiển thị cho người dùng.
|
Thông tin được in ra trong stderr (bằng cerr) sẽ là feedback hiển thị cho người dùng.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2>Ví dụ: </h2>
|
<h2>Ví dụ: </h2>
|
||||||
<p>Chương trình sau dùng để chấm bài toán guessgame: Người chơi phải tìm 1 số bí mật n (n chứa trong file input). Mỗi lần họ được hỏi một số x, và chương trình sẽ trả về "SMALLER", "BIGGER" hoặc "HOLA" dựa trên giá trị của n và x. Cần tìm ra n sau không quá 31 câu hỏi. </p>
|
<p>Chương trình sau dùng để chấm bài toán guessgame: Người chơi phải tìm 1 số bí mật n (n chứa trong file input). Mỗi lần họ được hỏi một số x, và chương trình sẽ trả về "SMALLER", "BIGGER" hoặc "HOLA" dựa trên giá trị của n và x. Cần tìm ra n sau không quá 31 câu hỏi. </p>
|
||||||
<pre class="code2">
|
{{
|
||||||
#include <bits/stdc++.h>
|
"""
|
||||||
|
#include <bits/stdc++.h>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
void quit(string reason) {
|
void quit(string reason) {
|
||||||
|
@ -175,35 +174,35 @@ void quit(string reason) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void read(long long& guess) {
|
void read(long long& guess) {
|
||||||
if (!(cin >> guess)) exit(1); // Nếu không có dòng này, chương trình sẽ chờ vô hạn
|
if (!(cin >> guess)) exit(1); // Nếu không có dòng này, chương trình sẽ chờ vô hạn
|
||||||
if (guess < 1 || guess > 2e9) exit(1);
|
if (guess < 1 || guess > 2e9) exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
ifstream inp(argv[1]);
|
ifstream inp(argv[1]);
|
||||||
int N, guesses = 0;
|
int N, guesses = 0;
|
||||||
long long guess;
|
long long guess;
|
||||||
inp >> N;
|
inp >> N;
|
||||||
|
|
||||||
while (guess != N && guesses <= 31) {
|
while (guess != N && guesses <= 31) {
|
||||||
read(guess);
|
read(guess);
|
||||||
if (guess == N) {
|
if (guess == N) {
|
||||||
cout << "HOLA" << endl;
|
cout << \"HOLA\" << endl;
|
||||||
} else if (guess > N) {
|
} else if (guess > N) {
|
||||||
cout << "SMALLER" << endl;
|
cout << \"SMALLER\" << endl;
|
||||||
} else {
|
} else {
|
||||||
cout << "BIGGER" << endl;
|
cout << \"BIGGER\" << endl;
|
||||||
}
|
}
|
||||||
guesses++;
|
guesses++;
|
||||||
}
|
}
|
||||||
cerr << "Number of used guesses: " << guesses << endl;
|
cerr << \"Number of used guesses: \" << guesses << endl;
|
||||||
if (guesses <= 31)
|
if (guesses <= 31)
|
||||||
return 0; // AC
|
return 0; // AC
|
||||||
else {
|
else {
|
||||||
cerr << "Used too many guesses" << endl;
|
cerr << \"Used too many guesses\" << endl;
|
||||||
return 1; // WA
|
return 1; // WA
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</pre>
|
""" | highlight('cpp')}}
|
||||||
</article>
|
</article>
|
||||||
{% endblock body %}
|
{% endblock %}
|
|
@ -13,6 +13,6 @@
|
||||||
{% if request.profile.id in submission.problem.editor_ids or perms.judge.edit_all_problem %}
|
{% if request.profile.id in submission.problem.editor_ids or perms.judge.edit_all_problem %}
|
||||||
<hr style="float:left;width:30%"><br>
|
<hr style="float:left;width:30%"><br>
|
||||||
<h4>{{ _('Error information') }}</h4>
|
<h4>{{ _('Error information') }}</h4>
|
||||||
<pre><code>{{ submission.error|highlight('pytb') }}</code></pre>
|
<code>{{ submission.error|highlight('pytb', linenos=False) }}</code>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
Loading…
Reference in a new issue