From cd5672abf0a65f6b1965f628a2be825dcf3a4bc6 Mon Sep 17 00:00:00 2001 From: cuom1999 Date: Fri, 17 Jun 2022 21:37:13 +0700 Subject: [PATCH] Update checker sample --- judge/templatetags/code_highlight.py | 4 +- templates/about/custom-checker-sample.html | 91 +++++++++---------- .../submission/internal-error-message.html | 2 +- 3 files changed, 48 insertions(+), 49 deletions(-) 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ạy
  • Return:

    -
      +
      • Cách 1: Trả về True/False
      • Cách 2: Trả về một object CheckerResult có thể được gọi như sau
        CheckerResult(case_passed_bool, points_awarded, feedback='')
      • -
    +

    Ví dụ:

    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')}}

    2. Custom validator (CPP)

    @@ -110,8 +104,9 @@ main.exe [input_file] [output_file] [ans_file]

    Ví dụ:

    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 
     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
         }
     }
    -        
    +""" | highlight('cpp')}} +
    +

    3. Interactive (CPP)


    - Để 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.

    Return:

    @@ -159,14 +156,16 @@ main.exe [input_file] Thông tin được in ra trong stderr (bằng cerr) sẽ là feedback hiển thị cho người dùng.

    Ví dụ:

    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 
     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
         }
     }
    -        
    +""" | highlight('cpp')}}
    -{% endblock body %} \ No newline at end of file +{% endblock %} \ No newline at end of file diff --git a/templates/submission/internal-error-message.html b/templates/submission/internal-error-message.html index 2b2e5b0..00ad7d6 100644 --- a/templates/submission/internal-error-message.html +++ b/templates/submission/internal-error-message.html @@ -13,6 +13,6 @@ {% if request.profile.id in submission.problem.editor_ids or perms.judge.edit_all_problem %}

    {{ _('Error information') }}

    -
    {{ submission.error|highlight('pytb') }}
    + {{ submission.error|highlight('pytb', linenos=False) }} {% endif %} {% endif %} \ No newline at end of file