1. Custom checker (PY)
@@ -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:
diff --git a/judge/templatetags/code_highlight.py b/judge/templatetags/code_highlight.py
index e47e165..06ff6d0 100644
--- a/judge/templatetags/code_highlight.py
+++ b/judge/templatetags/code_highlight.py
@@ -6,5 +6,5 @@ register = template.Library()
@register.filter
-def highlight(code, language):
- return highlight_code(code, language)
+def highlight(code, language, linenos=True):
+ return highlight_code(code, language, linenos)
diff --git a/templates/about/custom-checker-sample.html b/templates/about/custom-checker-sample.html
index 0f3819a..486e8bd 100644
--- a/templates/about/custom-checker-sample.html
+++ b/templates/about/custom-checker-sample.html
@@ -1,27 +1,17 @@
-{% extends "base.html" %}
-{% block body %}
+{% extends "common-content.html" %}
+{% block description %}
-
-
1. Custom checker (PY)
@@ -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:
+{{ +""" def check(process_output, judge_output, **kwargs): - # return True/False+ # return True/False +"""|highlight('py')}}
Trong đó, **kwargs
có thể chứa các biến sau:
@@ -47,15 +39,16 @@ def check(process_output, judge_output, **kwargs):
execution_time:
thời gian chạyCheckerResult
có thể được gọi như sau CheckerResult(case_passed_bool, points_awarded, feedback='')
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.
-+{{ +""" from dmoj.result import CheckerResult @@ -82,7 +75,8 @@ def check(process_output, judge_output, judge_input, **kwargs): if (n == a + b): return True - return wa('a + b != n')+ return wa('a + b != n') +"""| highlight('py')}}
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.
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.
--#include <bits/stdc++.h> +{{ +""" +#include+""" | highlight('cpp')}} +using namespace std; int main(int argc, char** argv) { @@ -121,12 +116,12 @@ int main(int argc, char** argv) { int n, a, b, c, d; - inp >> n; - out >> a >> b; - ans >> c >> d; + inp >> n; + out >> a >> b; + ans >> c >> d; if (a + b == c + d) { - cout << a << " + " << b << " = " << c << " + " << d << endl; + cout << a << \" + \" << b << \" = \" << c << \" + \" << d << endl; if (a >= 0 && b >= 0) { return 0; // AC @@ -137,20 +132,22 @@ int main(int argc, char** argv) { } } else { - cout << "a + b = " << a + b << " != " << n << endl; + cout << \"a + b = \" << a + b << \" != \" << n << endl; return 1; // WA } } -
- Để 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 input_file
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 input_file
answer_file
tương ứng file input và đáp án (nếu cần thiết).
Để 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):
-main.exe [input_file]+main.exe [input_file] [answer_file] hoặc thay bằng
./main
trên Linux/MacOS.
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.
--#include <bits/stdc++.h> +{{ +""" +#include+""" | highlight('cpp')}}using namespace std; void quit(string reason) { @@ -175,35 +174,35 @@ void quit(string reason) { } 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 (guess < 1 || guess > 2e9) exit(1); + 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); } int main(int argc, char *argv[]) { ifstream inp(argv[1]); int N, guesses = 0; long long guess; - inp >> N; + inp >> N; - while (guess != N && guesses <= 31) { + while (guess != N && guesses <= 31) { read(guess); if (guess == N) { - cout << "HOLA" << endl; - } else if (guess > N) { - cout << "SMALLER" << endl; + cout << \"HOLA\" << endl; + } else if (guess > N) { + cout << \"SMALLER\" << endl; } else { - cout << "BIGGER" << endl; + cout << \"BIGGER\" << endl; } guesses++; } - cerr << "Number of used guesses: " << guesses << endl; - if (guesses <= 31) + cerr << \"Number of used guesses: \" << guesses << endl; + if (guesses <= 31) return 0; // AC else { - cerr << "Used too many guesses" << endl; + cerr << \"Used too many guesses\" << endl; return 1; // WA } } -
{{ submission.error|highlight('pytb') }}
+ {{ submission.error|highlight('pytb', linenos=False) }}
{% endif %}
{% endif %}
\ No newline at end of file