Add file io
This commit is contained in:
parent
c9091f2e75
commit
a1bcc2cb46
7 changed files with 154 additions and 80 deletions
23
judge/migrations/0124_auto_20220602_1116.py
Normal file
23
judge/migrations/0124_auto_20220602_1116.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
# Generated by Django 2.2.25 on 2022-06-02 04:16
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('judge', '0123_auto_20220502_2356'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='problemdata',
|
||||
name='fileio_input',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='input file name'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='problemdata',
|
||||
name='fileio_output',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='output file name'),
|
||||
),
|
||||
]
|
|
@ -105,6 +105,12 @@ class ProblemData(models.Model):
|
|||
upload_to=problem_directory_file,
|
||||
validators=[FileExtensionValidator(allowed_extensions=["cpp"])],
|
||||
)
|
||||
fileio_input = models.TextField(
|
||||
verbose_name=_("input file name"), blank=True, null=True
|
||||
)
|
||||
fileio_output = models.TextField(
|
||||
verbose_name=_("output file name"), blank=True, null=True
|
||||
)
|
||||
|
||||
__original_zipfile = None
|
||||
|
||||
|
|
|
@ -239,6 +239,14 @@ class ProblemDataCompiler(object):
|
|||
init["checker"] = make_checker(self.data)
|
||||
else:
|
||||
self.data.checker_args = ""
|
||||
if self.data.fileio_input:
|
||||
if "file_io" not in init:
|
||||
init["file_io"] = {}
|
||||
init["file_io"]["input"] = self.data.fileio_input
|
||||
if self.data.fileio_output:
|
||||
if "file_io" not in init:
|
||||
init["file_io"] = {}
|
||||
init["file_io"]["output"] = self.data.fileio_output
|
||||
|
||||
return init
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ from django.forms import (
|
|||
Select,
|
||||
formset_factory,
|
||||
FileInput,
|
||||
TextInput,
|
||||
)
|
||||
from django.http import Http404, HttpResponse, HttpResponseRedirect, JsonResponse
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
|
@ -88,6 +89,8 @@ class ProblemDataForm(ModelForm):
|
|||
"custom_checker",
|
||||
"custom_validator",
|
||||
"interactive_judge",
|
||||
"fileio_input",
|
||||
"fileio_output",
|
||||
]
|
||||
widgets = {
|
||||
"zipfile": FineUploadFileInput,
|
||||
|
@ -95,6 +98,8 @@ class ProblemDataForm(ModelForm):
|
|||
"generator": HiddenInput,
|
||||
"output_limit": HiddenInput,
|
||||
"output_prefix": HiddenInput,
|
||||
"fileio_input": TextInput,
|
||||
"fileio_output": TextInput,
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: lqdoj2\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-06-01 12:50+0700\n"
|
||||
"POT-Creation-Date: 2022-06-02 11:58+0700\n"
|
||||
"PO-Revision-Date: 2021-07-20 03:44\n"
|
||||
"Last-Translator: Icyene\n"
|
||||
"Language-Team: Vietnamese\n"
|
||||
|
@ -1636,11 +1636,11 @@ msgstr "file zip chứa test"
|
|||
msgid "generator file"
|
||||
msgstr "file tạo test"
|
||||
|
||||
#: judge/models/problem_data.py:68 judge/models/problem_data.py:190
|
||||
#: judge/models/problem_data.py:68 judge/models/problem_data.py:196
|
||||
msgid "output prefix length"
|
||||
msgstr "độ dài hiển thị output"
|
||||
|
||||
#: judge/models/problem_data.py:71 judge/models/problem_data.py:193
|
||||
#: judge/models/problem_data.py:71 judge/models/problem_data.py:199
|
||||
msgid "output limit length"
|
||||
msgstr "giới hạn hiển thị output"
|
||||
|
||||
|
@ -1648,15 +1648,15 @@ msgstr "giới hạn hiển thị output"
|
|||
msgid "init.yml generation feedback"
|
||||
msgstr "phản hồi của quá trình tạo file init.yml"
|
||||
|
||||
#: judge/models/problem_data.py:77 judge/models/problem_data.py:196
|
||||
#: judge/models/problem_data.py:77 judge/models/problem_data.py:202
|
||||
msgid "checker"
|
||||
msgstr "trình chấm"
|
||||
|
||||
#: judge/models/problem_data.py:80 judge/models/problem_data.py:199
|
||||
#: judge/models/problem_data.py:80 judge/models/problem_data.py:205
|
||||
msgid "checker arguments"
|
||||
msgstr "các biến trong trình chấm"
|
||||
|
||||
#: judge/models/problem_data.py:82 judge/models/problem_data.py:201
|
||||
#: judge/models/problem_data.py:82 judge/models/problem_data.py:207
|
||||
msgid "checker arguments as a JSON object"
|
||||
msgstr "các biến trong trình chấm theo dạng JSON"
|
||||
|
||||
|
@ -1672,47 +1672,47 @@ msgstr "file trình chấm"
|
|||
msgid "interactive judge"
|
||||
msgstr ""
|
||||
|
||||
#: judge/models/problem_data.py:165
|
||||
msgid "problem data set"
|
||||
msgstr "tập hợp dữ liệu bài"
|
||||
|
||||
#: judge/models/problem_data.py:169
|
||||
msgid "case position"
|
||||
msgstr "vị trí test"
|
||||
|
||||
#: judge/models/problem_data.py:172
|
||||
msgid "case type"
|
||||
msgstr "loại test"
|
||||
|
||||
#: judge/models/problem_data.py:174
|
||||
msgid "Normal case"
|
||||
msgstr "Test bình thường"
|
||||
|
||||
#: judge/models/problem_data.py:175
|
||||
msgid "Batch start"
|
||||
msgstr "Bắt đầu nhóm"
|
||||
|
||||
#: judge/models/problem_data.py:176
|
||||
msgid "Batch end"
|
||||
msgstr "Kết thúc nhóm"
|
||||
|
||||
#: judge/models/problem_data.py:181
|
||||
#: judge/models/problem_data.py:109 judge/models/problem_data.py:187
|
||||
msgid "input file name"
|
||||
msgstr "tên file input"
|
||||
|
||||
#: judge/models/problem_data.py:184
|
||||
#: judge/models/problem_data.py:112 judge/models/problem_data.py:190
|
||||
msgid "output file name"
|
||||
msgstr "tên file output"
|
||||
|
||||
#: judge/models/problem_data.py:186
|
||||
#: judge/models/problem_data.py:171
|
||||
msgid "problem data set"
|
||||
msgstr "tập hợp dữ liệu bài"
|
||||
|
||||
#: judge/models/problem_data.py:175
|
||||
msgid "case position"
|
||||
msgstr "vị trí test"
|
||||
|
||||
#: judge/models/problem_data.py:178
|
||||
msgid "case type"
|
||||
msgstr "loại test"
|
||||
|
||||
#: judge/models/problem_data.py:180
|
||||
msgid "Normal case"
|
||||
msgstr "Test bình thường"
|
||||
|
||||
#: judge/models/problem_data.py:181
|
||||
msgid "Batch start"
|
||||
msgstr "Bắt đầu nhóm"
|
||||
|
||||
#: judge/models/problem_data.py:182
|
||||
msgid "Batch end"
|
||||
msgstr "Kết thúc nhóm"
|
||||
|
||||
#: judge/models/problem_data.py:192
|
||||
msgid "generator arguments"
|
||||
msgstr "biến trong file sinh test"
|
||||
|
||||
#: judge/models/problem_data.py:187
|
||||
#: judge/models/problem_data.py:193
|
||||
msgid "point value"
|
||||
msgstr "điểm"
|
||||
|
||||
#: judge/models/problem_data.py:188
|
||||
#: judge/models/problem_data.py:194
|
||||
msgid "case is pretest?"
|
||||
msgstr "test là pretest?"
|
||||
|
||||
|
@ -2881,39 +2881,39 @@ msgstr "Nộp bài cho %(problem)s"
|
|||
msgid "Clone Problem"
|
||||
msgstr "Nhân bản bài tập"
|
||||
|
||||
#: judge/views/problem_data.py:68
|
||||
#: judge/views/problem_data.py:69
|
||||
msgid "Checker arguments must be a JSON object"
|
||||
msgstr ""
|
||||
|
||||
#: judge/views/problem_data.py:70
|
||||
#: judge/views/problem_data.py:71
|
||||
msgid "Checker arguments is invalid JSON"
|
||||
msgstr ""
|
||||
|
||||
#: judge/views/problem_data.py:77
|
||||
#: judge/views/problem_data.py:78
|
||||
msgid "Your zip file is invalid!"
|
||||
msgstr "File Zip không hợp lệ!"
|
||||
|
||||
#: judge/views/problem_data.py:157
|
||||
#: judge/views/problem_data.py:162
|
||||
#, python-brace-format
|
||||
msgid "Comparing submissions for {0}"
|
||||
msgstr "So sánh các bài nộp cho {0}"
|
||||
|
||||
#: judge/views/problem_data.py:161
|
||||
#: judge/views/problem_data.py:166
|
||||
#, python-brace-format
|
||||
msgid "Comparing submissions for <a href=\"{1}\">{0}</a>"
|
||||
msgstr "So sánh các bài nộp cho <a href=\"{1}\">{0}</a>"
|
||||
|
||||
#: judge/views/problem_data.py:198
|
||||
#: judge/views/problem_data.py:203
|
||||
#, python-brace-format
|
||||
msgid "Editing data for {0}"
|
||||
msgstr "Chỉnh sửa dữ liệu cho {0}"
|
||||
|
||||
#: judge/views/problem_data.py:202
|
||||
#: judge/views/problem_data.py:207
|
||||
#, python-format
|
||||
msgid "Editing data for %s"
|
||||
msgstr "Chỉnh sửa dữ liệu cho %s"
|
||||
|
||||
#: judge/views/problem_data.py:332 judge/views/problem_data.py:334
|
||||
#: judge/views/problem_data.py:337 judge/views/problem_data.py:339
|
||||
#, python-format
|
||||
msgid "Generated init.yml for %s"
|
||||
msgstr "File init.yml cho %s"
|
||||
|
@ -3043,25 +3043,25 @@ msgstr "Tất cả bài nộp của %s"
|
|||
msgid "All submissions for %s"
|
||||
msgstr "Tất cả bài nộp cho %s"
|
||||
|
||||
#: judge/views/submission.py:548
|
||||
#: judge/views/submission.py:551
|
||||
msgid "Must pass a problem"
|
||||
msgstr "Phải làm được một bài"
|
||||
|
||||
#: judge/views/submission.py:606
|
||||
#: judge/views/submission.py:609
|
||||
#, python-format
|
||||
msgid "My submissions for %(problem)s"
|
||||
msgstr "Bài nộp của tôi cho %(problem)s"
|
||||
|
||||
#: judge/views/submission.py:607
|
||||
#: judge/views/submission.py:610
|
||||
#, python-format
|
||||
msgid "%(user)s's submissions for %(problem)s"
|
||||
msgstr "Các bài nộp của %(user)s cho %(problem)s"
|
||||
|
||||
#: judge/views/submission.py:737
|
||||
#: judge/views/submission.py:740
|
||||
msgid "Must pass a contest"
|
||||
msgstr "Phải qua một kỳ thi"
|
||||
|
||||
#: judge/views/submission.py:765
|
||||
#: judge/views/submission.py:770
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"<a href=\"{1}\">{0}</a>'s submissions for <a href=\"{3}\">{2}</a> in <a href="
|
||||
|
@ -3070,7 +3070,7 @@ msgstr ""
|
|||
"Các bài nộp của <a href=\"{1}\">{0}</a> cho <a href=\"{3}\">{2}</a> trong <a "
|
||||
"href=\"{5}\">{4}</a>"
|
||||
|
||||
#: judge/views/submission.py:777
|
||||
#: judge/views/submission.py:782
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"<a href=\"{1}\">{0}</a>'s submissions for problem {2} in <a href=\"{4}\">{3}"
|
||||
|
@ -3079,6 +3079,12 @@ msgstr ""
|
|||
"Các bài nộp của <a href=\"{1}\">{0}</a> cho bài {2} trong <a href=\"{4}\">{3}"
|
||||
"</a>"
|
||||
|
||||
#: judge/views/submission.py:826
|
||||
#, fuzzy
|
||||
#| msgid "You do not have the permission to rejudge submissions."
|
||||
msgid "You don't have permission to access."
|
||||
msgstr "Bạn không có quyền chấm lại bài."
|
||||
|
||||
#: judge/views/ticket.py:65 judge/views/ticket.py:71
|
||||
msgid "Ticket title"
|
||||
msgstr "Tiêu đề báo cáo"
|
||||
|
@ -3483,7 +3489,7 @@ msgid "You have no ticket"
|
|||
msgstr "Bạn không có báo cáo"
|
||||
|
||||
#: templates/blog/list.html:94 templates/problem/list-base.html:392
|
||||
#: templates/problem/list.html:143 templates/problem/problem.html:401
|
||||
#: templates/problem/list.html:143 templates/problem/problem.html:411
|
||||
msgid "Clarifications"
|
||||
msgstr "Thông báo"
|
||||
|
||||
|
@ -3492,7 +3498,7 @@ msgid "Add"
|
|||
msgstr "Thêm mới"
|
||||
|
||||
#: templates/blog/list.html:119 templates/problem/list-base.html:414
|
||||
#: templates/problem/list.html:165 templates/problem/problem.html:412
|
||||
#: templates/problem/list.html:165 templates/problem/problem.html:422
|
||||
msgid "No clarifications have been made at this time."
|
||||
msgstr "Không có thông báo nào."
|
||||
|
||||
|
@ -3998,35 +4004,35 @@ msgstr "Khôi phục kết quả"
|
|||
msgid "Disqualify"
|
||||
msgstr "Hủy kết quả"
|
||||
|
||||
#: templates/contest/ranking.html:203
|
||||
#: templates/contest/ranking.html:21
|
||||
msgid "Are you sure you want to disqualify this participation?"
|
||||
msgstr "Bạn có chắc muốn hủy kết quả này?"
|
||||
|
||||
#: templates/contest/ranking.html:208
|
||||
#: templates/contest/ranking.html:26
|
||||
msgid "Are you sure you want to un-disqualify this participation?"
|
||||
msgstr "Bạn có chắc muốn khôi phục kết quả này?"
|
||||
|
||||
#: templates/contest/ranking.html:253
|
||||
#: templates/contest/ranking.html:71
|
||||
msgid "View user participation"
|
||||
msgstr "Xem các lần tham gia"
|
||||
|
||||
#: templates/contest/ranking.html:257
|
||||
#: templates/contest/ranking.html:75
|
||||
msgid "Show organizations"
|
||||
msgstr "Hiển thị tổ chức"
|
||||
|
||||
#: templates/contest/ranking.html:261
|
||||
#: templates/contest/ranking.html:79
|
||||
msgid "Show full name"
|
||||
msgstr "Hiển thị họ tên"
|
||||
|
||||
#: templates/contest/ranking.html:264
|
||||
#: templates/contest/ranking.html:82
|
||||
msgid "Show friends only"
|
||||
msgstr "Chỉ hiển thị bạn bè"
|
||||
|
||||
#: templates/contest/ranking.html:267
|
||||
#: templates/contest/ranking.html:85
|
||||
msgid "Total score only"
|
||||
msgstr "Chỉ hiển thị tổng điểm"
|
||||
|
||||
#: templates/contest/ranking.html:269
|
||||
#: templates/contest/ranking.html:87
|
||||
msgid "Show virtual participation"
|
||||
msgstr "Hiển thị tham gia ảo"
|
||||
|
||||
|
@ -4641,60 +4647,78 @@ msgstr "Thời gian:"
|
|||
msgid "Memory limit:"
|
||||
msgstr "Bộ nhớ:"
|
||||
|
||||
#: templates/problem/problem.html:277
|
||||
#: templates/problem/problem.html:262 templates/problem/raw.html:64
|
||||
#: templates/submission/status-testcases.html:141
|
||||
msgid "Input:"
|
||||
msgstr "Input:"
|
||||
|
||||
#: templates/problem/problem.html:264 templates/problem/raw.html:64
|
||||
msgid "stdin"
|
||||
msgstr "bàn phím"
|
||||
|
||||
#: templates/problem/problem.html:268 templates/problem/raw.html:67
|
||||
#: templates/submission/status-testcases.html:145
|
||||
msgid "Output:"
|
||||
msgstr "Output:"
|
||||
|
||||
#: templates/problem/problem.html:269 templates/problem/raw.html:67
|
||||
msgid "stdout"
|
||||
msgstr "màn hình"
|
||||
|
||||
#: templates/problem/problem.html:287
|
||||
msgid "Author:"
|
||||
msgid_plural "Authors:"
|
||||
msgstr[0] "Tác giả:"
|
||||
|
||||
#: templates/problem/problem.html:292
|
||||
#: templates/problem/problem.html:302
|
||||
msgid "Problem type"
|
||||
msgid_plural "Problem types"
|
||||
msgstr[0] "Dạng bài"
|
||||
|
||||
#: templates/problem/problem.html:305
|
||||
#: templates/problem/problem.html:315
|
||||
msgid "Allowed languages"
|
||||
msgstr "Ngôn ngữ cho phép"
|
||||
|
||||
#: templates/problem/problem.html:313
|
||||
#: templates/problem/problem.html:323
|
||||
#, python-format
|
||||
msgid "No %(lang)s judge online"
|
||||
msgstr "Không có máy chấm cho %(lang)s"
|
||||
|
||||
#: templates/problem/problem.html:324
|
||||
#: templates/problem/problem.html:334
|
||||
msgid "Judge:"
|
||||
msgid_plural "Judges:"
|
||||
msgstr[0] "Máy chấm:"
|
||||
|
||||
#: templates/problem/problem.html:341
|
||||
#: templates/problem/problem.html:351
|
||||
msgid "none available"
|
||||
msgstr "không có sẵn"
|
||||
|
||||
#: templates/problem/problem.html:353
|
||||
#: templates/problem/problem.html:363
|
||||
#, python-format
|
||||
msgid "This problem has %(length)s clarification(s)"
|
||||
msgstr "Bài này có %(length)s thông báo"
|
||||
|
||||
#: templates/problem/problem.html:378
|
||||
#: templates/problem/problem.html:388
|
||||
msgid "Request clarification"
|
||||
msgstr "Yêu cầu làm rõ đề"
|
||||
|
||||
#: templates/problem/problem.html:380
|
||||
#: templates/problem/problem.html:390
|
||||
msgid "Report an issue"
|
||||
msgstr "Báo cáo một vấn đề"
|
||||
|
||||
#: templates/problem/problem.html:389
|
||||
#: templates/problem/problem.html:399
|
||||
msgid "View comments"
|
||||
msgstr "Xem bình luận"
|
||||
|
||||
#: templates/problem/problem.html:391
|
||||
#: templates/problem/problem.html:401
|
||||
msgid "Be the first to comment"
|
||||
msgstr "Bình luận đầu tiên"
|
||||
|
||||
#: templates/problem/raw.html:64
|
||||
#: templates/problem/raw.html:70
|
||||
msgid "Time Limit:"
|
||||
msgstr "Giới hạn thời gian:"
|
||||
|
||||
#: templates/problem/raw.html:73
|
||||
#: templates/problem/raw.html:79
|
||||
msgid "Memory Limit:"
|
||||
msgstr "Giới hạn bộ nhớ:"
|
||||
|
||||
|
@ -5138,14 +5162,6 @@ msgstr "Pretest"
|
|||
msgid "Test case"
|
||||
msgstr "Test"
|
||||
|
||||
#: templates/submission/status-testcases.html:141
|
||||
msgid "Input:"
|
||||
msgstr "Input:"
|
||||
|
||||
#: templates/submission/status-testcases.html:145
|
||||
msgid "Output:"
|
||||
msgstr "Output:"
|
||||
|
||||
#: templates/submission/status-testcases.html:149
|
||||
msgid "Answer:"
|
||||
msgstr "Kết quả:"
|
||||
|
|
|
@ -258,6 +258,16 @@
|
|||
<i class="fa fa-server fa-fw"></i><span class="pi-name">{{ _('Memory limit:') }}</span>
|
||||
<span class="pi-value">{{ problem.memory_limit|kbsimpleformat }}</span>
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
<i class="fa fa-file-o fa-fw"></i><span class="pi-name">{{ _('Input:') }}</span>
|
||||
<span class="pi-value">
|
||||
{{ problem.data_files.fileio_input or _('stdin') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
<i class="fa fa-file fa-fw"></i><span class="pi-name">{{ _('Output:') }}</span>
|
||||
<span class="pi-value">{{ problem.data_files.fileio_output or _('stdout') }}</span>
|
||||
</div>
|
||||
<div class="problem-lang-limits">
|
||||
{% for name, limit in problem.language_memory_limit %}
|
||||
<div class="lang-limit">
|
||||
|
|
|
@ -60,6 +60,12 @@
|
|||
<h2 style="color:#393630; display: inline-block;">{{ problem_name }}</h2>
|
||||
<hr>
|
||||
<div align="center" style="position: relative;">
|
||||
<div class="problem-info-entry">
|
||||
<b>{{ _('Input:') }}</b> {{ problem.data_files.fileio_input or _('stdin') }}
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
<b>{{ _('Output:') }}</b> {{ problem.data_files.fileio_output or _('stdout') }}
|
||||
</div>
|
||||
<div class="problem-info-entry">
|
||||
<b>{{ _('Time Limit:') }}</b> {{ problem.time_limit }}s
|
||||
{% for name, limit in problem.language_time_limit %}
|
||||
|
|
Loading…
Reference in a new issue