From 7f3e22e3bf5cedc59669519ecd45519eb2322d38 Mon Sep 17 00:00:00 2001 From: cuom1999 Date: Wed, 31 Aug 2022 00:23:23 -0500 Subject: [PATCH] Add memory unit to problem admin --- dmoj/urls.py | 6 +- judge/admin/problem.py | 30 ++- judge/migrations/0130_auto_20220831_1048.py | 20 +- judge/models/problem.py | 7 +- judge/views/problem.py | 4 +- locale/vi/LC_MESSAGES/django.po | 242 ++++++++++---------- 6 files changed, 175 insertions(+), 134 deletions(-) diff --git a/dmoj/urls.py b/dmoj/urls.py index 39c66f0..e657af1 100644 --- a/dmoj/urls.py +++ b/dmoj/urls.py @@ -256,7 +256,11 @@ urlpatterns = [ problem.ProblemPdfView.as_view(), name="problem_pdf", ), - url(r"^/pdf_description$", problem.ProblemPdfDescriptionView.as_view(), name="problem_pdf_description"), + url( + r"^/pdf_description$", + problem.ProblemPdfDescriptionView.as_view(), + name="problem_pdf_description", + ), url(r"^/clone", problem.ProblemClone.as_view(), name="problem_clone"), url(r"^/submit$", problem.problem_submit, name="problem_submit"), url( diff --git a/judge/admin/problem.py b/judge/admin/problem.py index 15337d2..e5a036d 100644 --- a/judge/admin/problem.py +++ b/judge/admin/problem.py @@ -33,11 +33,14 @@ from judge.widgets import ( HeavyPreviewPageDownWidget, ) +MEMORY_UNITS = (("KB", "KB"), ("MB", "MB")) + class ProblemForm(ModelForm): change_message = forms.CharField( max_length=256, label="Edit reason", required=False ) + memory_unit = forms.ChoiceField(choices=MEMORY_UNITS) def __init__(self, *args, **kwargs): super(ProblemForm, self).__init__(*args, **kwargs) @@ -51,6 +54,12 @@ class ProblemForm(ModelForm): } ) + def clean(self): + memory_unit = self.cleaned_data.get("memory_unit", "KB") + if memory_unit == "MB": + self.cleaned_data["memory_limit"] *= 1024 + return self.cleaned_data + class Meta: widgets = { "authors": AdminHeavySelect2MultipleWidget( @@ -94,13 +103,28 @@ class ProblemCreatorListFilter(admin.SimpleListFilter): class LanguageLimitInlineForm(ModelForm): + memory_unit = forms.ChoiceField(choices=MEMORY_UNITS, label=_("Memory unit")) + class Meta: - widgets = {"language": AdminSelect2Widget} + widgets = { + "language": AdminSelect2Widget, + "memory_limit": TextInput(attrs={"size": "10"}), + } + + def clean(self): + if not self.cleaned_data.get("language"): + self.cleaned_data["DELETE"] = True + if ( + self.cleaned_data.get("memory_limit") + and self.cleaned_data.get("memory_unit") == "MB" + ): + self.cleaned_data["memory_limit"] *= 1024 + return self.cleaned_data class LanguageLimitInline(admin.TabularInline): model = LanguageLimit - fields = ("language", "time_limit", "memory_limit") + fields = ("language", "time_limit", "memory_limit", "memory_unit") form = LanguageLimitInlineForm @@ -204,7 +228,7 @@ class ProblemAdmin(CompareVersionAdmin): ), (_("Taxonomy"), {"fields": ("types", "group")}), (_("Points"), {"fields": (("points", "partial"), "short_circuit")}), - (_("Limits"), {"fields": ("time_limit", "memory_limit")}), + (_("Limits"), {"fields": ("time_limit", ("memory_limit", "memory_unit"))}), (_("Language"), {"fields": ("allowed_languages",)}), (_("Justice"), {"fields": ("banned_users",)}), (_("History"), {"fields": ("change_message",)}), diff --git a/judge/migrations/0130_auto_20220831_1048.py b/judge/migrations/0130_auto_20220831_1048.py index f4983b6..6bb3478 100644 --- a/judge/migrations/0130_auto_20220831_1048.py +++ b/judge/migrations/0130_auto_20220831_1048.py @@ -8,18 +8,24 @@ import judge.utils.problem_data class Migration(migrations.Migration): dependencies = [ - ('judge', '0129_auto_20220622_1424'), + ("judge", "0129_auto_20220622_1424"), ] operations = [ migrations.AddField( - model_name='problem', - name='pdf_description', - field=models.FileField(blank=True, null=True, storage=judge.utils.problem_data.ProblemDataStorage(), upload_to=judge.models.problem.problem_directory_file, verbose_name='pdf statement'), + model_name="problem", + name="pdf_description", + field=models.FileField( + blank=True, + null=True, + storage=judge.utils.problem_data.ProblemDataStorage(), + upload_to=judge.models.problem.problem_directory_file, + verbose_name="pdf statement", + ), ), migrations.AlterField( - model_name='problem', - name='description', - field=models.TextField(blank=True, verbose_name='problem body'), + model_name="problem", + name="description", + field=models.TextField(blank=True, verbose_name="problem body"), ), ] diff --git a/judge/models/problem.py b/judge/models/problem.py index 0af6b76..186128a 100644 --- a/judge/models/problem.py +++ b/judge/models/problem.py @@ -18,7 +18,10 @@ from judge.models.profile import Organization, Profile from judge.models.runtime import Language from judge.user_translations import gettext as user_gettext from judge.utils.raw_sql import RawSQLColumn, unique_together_left_join -from judge.models.problem_data import problem_data_storage, problem_directory_file_helper +from judge.models.problem_data import ( + problem_data_storage, + problem_directory_file_helper, +) __all__ = [ "ProblemGroup", @@ -32,9 +35,11 @@ __all__ = [ "TranslatedProblemForeignKeyQuerySet", ] + def problem_directory_file(data, filename): return problem_directory_file_helper(data.code, filename) + class ProblemType(models.Model): name = models.CharField( max_length=20, verbose_name=_("problem category ID"), unique=True diff --git a/judge/views/problem.py b/judge/views/problem.py index d1d6730..185270f 100644 --- a/judge/views/problem.py +++ b/judge/views/problem.py @@ -417,9 +417,7 @@ class ProblemPdfDescriptionView(ProblemMixin, SingleObjectMixin, View): response.content = f.read() response["Content-Type"] = "application/pdf" - response["Content-Disposition"] = "inline; filename=%s.pdf" % ( - problem.code, - ) + response["Content-Disposition"] = "inline; filename=%s.pdf" % (problem.code,) return response diff --git a/locale/vi/LC_MESSAGES/django.po b/locale/vi/LC_MESSAGES/django.po index cb323af..dd21d6c 100644 --- a/locale/vi/LC_MESSAGES/django.po +++ b/locale/vi/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: lqdoj2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-08-31 11:06+0700\n" +"POT-Creation-Date: 2022-08-31 12:22+0700\n" "PO-Revision-Date: 2021-07-20 03:44\n" "Last-Translator: Icyene\n" "Language-Team: Vietnamese\n" @@ -175,7 +175,7 @@ msgstr "" msgid "Access" msgstr "Truy cập" -#: judge/admin/contest.py:203 judge/admin/problem.py:209 +#: judge/admin/contest.py:203 judge/admin/problem.py:233 msgid "Justice" msgstr "Xử phạt" @@ -247,24 +247,28 @@ msgstr "" msgid "diff" msgstr "" -#: judge/admin/organization.py:59 judge/admin/problem.py:266 +#: judge/admin/organization.py:59 judge/admin/problem.py:290 #: judge/admin/profile.py:116 msgid "View on site" msgstr "Xem trên trang" -#: judge/admin/problem.py:50 +#: judge/admin/problem.py:53 msgid "Describe the changes you made (optional)" msgstr "Mô tả các thay đổi (tùy chọn)" -#: judge/admin/problem.py:202 +#: judge/admin/problem.py:106 +msgid "Memory unit" +msgstr "Đơn vị bộ nhớ" + +#: judge/admin/problem.py:226 msgid "Social Media" msgstr "Mạng Xã Hội" -#: judge/admin/problem.py:205 +#: judge/admin/problem.py:229 msgid "Taxonomy" msgstr "" -#: judge/admin/problem.py:206 judge/admin/problem.py:402 +#: judge/admin/problem.py:230 judge/admin/problem.py:426 #: templates/contest/contest.html:84 templates/problem/data.html:475 #: templates/problem/list.html:20 templates/problem/list.html:44 #: templates/user/base-users-table.html:10 templates/user/user-about.html:36 @@ -272,65 +276,65 @@ msgstr "" msgid "Points" msgstr "Điểm" -#: judge/admin/problem.py:207 +#: judge/admin/problem.py:231 msgid "Limits" msgstr "Giới hạn" -#: judge/admin/problem.py:208 judge/admin/submission.py:353 +#: judge/admin/problem.py:232 judge/admin/submission.py:353 #: templates/stats/base.html:14 templates/submission/list.html:342 msgid "Language" msgstr "Ngôn ngữ" -#: judge/admin/problem.py:210 +#: judge/admin/problem.py:234 msgid "History" msgstr "Lịch sử" -#: judge/admin/problem.py:262 templates/problem/list-base.html:106 +#: judge/admin/problem.py:286 templates/problem/list-base.html:106 msgid "Authors" msgstr "Các tác giả" -#: judge/admin/problem.py:283 +#: judge/admin/problem.py:307 #, python-format msgid "%d problem successfully marked as public." msgid_plural "%d problems successfully marked as public." msgstr[0] "%d bài tập đã được đánh dấu công khai." -#: judge/admin/problem.py:290 +#: judge/admin/problem.py:314 msgid "Mark problems as public" msgstr "Công khai bài tập" -#: judge/admin/problem.py:299 +#: judge/admin/problem.py:323 #, python-format msgid "%d problem successfully marked as private." msgid_plural "%d problems successfully marked as private." msgstr[0] "%d bài tập đã được đánh dấu riêng tư." -#: judge/admin/problem.py:306 +#: judge/admin/problem.py:330 msgid "Mark problems as private" msgstr "Đánh dấu các bài tập là riêng tư" -#: judge/admin/problem.py:396 judge/admin/submission.py:316 +#: judge/admin/problem.py:420 judge/admin/submission.py:316 #: templates/problem/list.html:16 templates/problem/list.html:33 msgid "Problem code" msgstr "Mã bài" -#: judge/admin/problem.py:408 judge/admin/submission.py:322 +#: judge/admin/problem.py:432 judge/admin/submission.py:322 msgid "Problem name" msgstr "Tên bài" -#: judge/admin/problem.py:414 +#: judge/admin/problem.py:438 #, fuzzy #| msgid "contest rating" msgid "Voter rating" msgstr "rating kỳ thi" -#: judge/admin/problem.py:420 +#: judge/admin/problem.py:444 #, fuzzy #| msgid "Total points" msgid "Voter point" msgstr "Tổng điểm" -#: judge/admin/problem.py:426 +#: judge/admin/problem.py:450 msgid "Vote" msgstr "" @@ -568,7 +572,7 @@ msgstr "Two Factor Authentication phải chứa 6 chữ số." msgid "Invalid Two Factor Authentication token." msgstr "Token Two Factor Authentication không hợp lệ." -#: judge/forms.py:266 judge/models/problem.py:154 +#: judge/forms.py:266 judge/models/problem.py:159 msgid "Problem code must be ^[a-z0-9]+$" msgstr "Mã bài phải có dạng ^[a-z0-9]+$" @@ -631,7 +635,7 @@ msgstr "người bình luận" msgid "associated page" msgstr "trang tương ứng" -#: judge/models/comment.py:53 judge/models/problem.py:724 +#: judge/models/comment.py:53 judge/models/problem.py:729 msgid "votes" msgstr "bình chọn" @@ -651,7 +655,7 @@ msgstr "bình luận" msgid "comments" msgstr "" -#: judge/models/comment.py:160 judge/models/problem.py:692 +#: judge/models/comment.py:160 judge/models/problem.py:697 #, python-format msgid "Editorial for %s" msgstr "" @@ -769,7 +773,7 @@ msgstr "" msgid "description" msgstr "mô tả" -#: judge/models/contest.py:118 judge/models/problem.py:587 +#: judge/models/contest.py:118 judge/models/problem.py:592 #: judge/models/runtime.py:216 msgid "problems" msgstr "bài tập" @@ -782,8 +786,8 @@ msgstr "thời gian bắt đầu" msgid "end time" msgstr "thời gian kết thúc" -#: judge/models/contest.py:123 judge/models/problem.py:207 -#: judge/models/problem.py:632 +#: judge/models/contest.py:123 judge/models/problem.py:212 +#: judge/models/problem.py:637 msgid "time limit" msgstr "giới hạn thời gian" @@ -794,7 +798,7 @@ msgstr "" "Định dạng hh:mm:ss (giờ:phút:giây). Ví dụ, nếu muốn tạo kỳ thi dài 2h, hãy " "nhập 02:00:00" -#: judge/models/contest.py:131 judge/models/problem.py:246 +#: judge/models/contest.py:131 judge/models/problem.py:251 msgid "publicly visible" msgstr "công khai" @@ -893,12 +897,12 @@ msgstr "" "kỳ thi, hãy bỏ đánh dấu ô này và chấm lại tất cả các bài." #: judge/models/contest.py:211 judge/models/interface.py:92 -#: judge/models/problem.py:303 +#: judge/models/problem.py:308 msgid "private to organizations" msgstr "riêng tư với các tổ chức" #: judge/models/contest.py:216 judge/models/interface.py:88 -#: judge/models/problem.py:299 judge/models/profile.py:125 +#: judge/models/problem.py:304 judge/models/profile.py:125 msgid "organizations" msgstr "tổ chức" @@ -906,7 +910,7 @@ msgstr "tổ chức" msgid "If private, only these organizations may see the contest" msgstr "Nếu riêng tư, chỉ những tổ chức này thấy được kỳ thi" -#: judge/models/contest.py:220 judge/models/problem.py:277 +#: judge/models/contest.py:220 judge/models/problem.py:282 msgid "OpenGraph image" msgstr "Hình ảnh OpenGraph" @@ -927,7 +931,7 @@ msgstr "số lượng thí sinh thi trực tiếp" msgid "contest summary" msgstr "tổng kết kỳ thi" -#: judge/models/contest.py:242 judge/models/problem.py:283 +#: judge/models/contest.py:242 judge/models/problem.py:288 msgid "Plain-text, shown in meta description tag, e.g. for social media." msgstr "" @@ -943,7 +947,7 @@ msgstr "" "Mật khẩu truy cập cho các thí sinh muốn tham gia kỳ thi. Để trống nếu không " "dùng." -#: judge/models/contest.py:257 judge/models/problem.py:265 +#: judge/models/contest.py:257 judge/models/problem.py:270 msgid "personae non gratae" msgstr "" @@ -1088,14 +1092,14 @@ msgid "contest participations" msgstr "lần tham gia kỳ thi" #: judge/models/contest.py:739 judge/models/contest.py:783 -#: judge/models/contest.py:845 judge/models/problem.py:586 -#: judge/models/problem.py:593 judge/models/problem.py:624 -#: judge/models/problem.py:655 judge/models/problem_data.py:50 +#: judge/models/contest.py:845 judge/models/problem.py:591 +#: judge/models/problem.py:598 judge/models/problem.py:629 +#: judge/models/problem.py:660 judge/models/problem_data.py:50 msgid "problem" msgstr "bài tập" #: judge/models/contest.py:747 judge/models/contest.py:795 -#: judge/models/problem.py:230 +#: judge/models/problem.py:235 msgid "points" msgstr "điểm" @@ -1227,7 +1231,7 @@ msgstr "mục cha" msgid "post title" msgstr "tiêu đề bài đăng" -#: judge/models/interface.py:75 judge/models/problem.py:681 +#: judge/models/interface.py:75 judge/models/problem.py:686 msgid "authors" msgstr "tác giả" @@ -1235,7 +1239,7 @@ msgstr "tác giả" msgid "slug" msgstr "slug" -#: judge/models/interface.py:77 judge/models/problem.py:679 +#: judge/models/interface.py:77 judge/models/problem.py:684 msgid "public visibility" msgstr "khả năng hiển thị công khai" @@ -1299,140 +1303,140 @@ msgstr "thời gian gửi" msgid "messages in the thread" msgstr "tin nhắn trong chuỗi" -#: judge/models/problem.py:40 +#: judge/models/problem.py:45 msgid "problem category ID" msgstr "mã của nhóm bài" -#: judge/models/problem.py:43 +#: judge/models/problem.py:48 msgid "problem category name" msgstr "tên nhóm bài" -#: judge/models/problem.py:51 +#: judge/models/problem.py:56 msgid "problem type" msgstr "dạng bài" -#: judge/models/problem.py:52 judge/models/problem.py:197 +#: judge/models/problem.py:57 judge/models/problem.py:202 #: judge/models/volunteer.py:28 msgid "problem types" msgstr "dạng bài" -#: judge/models/problem.py:57 +#: judge/models/problem.py:62 msgid "problem group ID" msgstr "mã của nhóm bài" -#: judge/models/problem.py:59 +#: judge/models/problem.py:64 msgid "problem group name" msgstr "tên nhóm bài" -#: judge/models/problem.py:66 judge/models/problem.py:202 +#: judge/models/problem.py:71 judge/models/problem.py:207 msgid "problem group" msgstr "nhóm bài" -#: judge/models/problem.py:67 +#: judge/models/problem.py:72 msgid "problem groups" msgstr "nhóm bài" -#: judge/models/problem.py:74 +#: judge/models/problem.py:79 msgid "key" msgstr "" -#: judge/models/problem.py:77 +#: judge/models/problem.py:82 msgid "link" msgstr "đường dẫn" -#: judge/models/problem.py:78 +#: judge/models/problem.py:83 msgid "full name" msgstr "tên đầy đủ" -#: judge/models/problem.py:82 judge/models/profile.py:38 +#: judge/models/problem.py:87 judge/models/profile.py:38 #: judge/models/runtime.py:34 msgid "short name" msgstr "tên ngắn" -#: judge/models/problem.py:83 +#: judge/models/problem.py:88 msgid "Displayed on pages under this license" msgstr "Được hiển thị trên các trang theo giấy phép này" -#: judge/models/problem.py:88 +#: judge/models/problem.py:93 msgid "icon" msgstr "icon" -#: judge/models/problem.py:89 +#: judge/models/problem.py:94 msgid "URL to the icon" msgstr "Đường dẫn icon" -#: judge/models/problem.py:91 +#: judge/models/problem.py:96 msgid "license text" msgstr "văn bản giấy phép" -#: judge/models/problem.py:100 +#: judge/models/problem.py:105 msgid "license" msgstr "" -#: judge/models/problem.py:101 +#: judge/models/problem.py:106 msgid "licenses" msgstr "" -#: judge/models/problem.py:151 +#: judge/models/problem.py:156 msgid "problem code" msgstr "mã bài" -#: judge/models/problem.py:157 +#: judge/models/problem.py:162 msgid "A short, unique code for the problem, used in the url after /problem/" msgstr "Mã bài ngắn, độc nhất cho bài tập, được dùng trong url sau /problem/" -#: judge/models/problem.py:162 +#: judge/models/problem.py:167 msgid "problem name" msgstr "Tên bài" -#: judge/models/problem.py:164 +#: judge/models/problem.py:169 msgid "The full name of the problem, as shown in the problem list." msgstr "Tên đầy đủ của bài, như được hiển thị trên danh sách bài tập" -#: judge/models/problem.py:166 +#: judge/models/problem.py:171 msgid "problem body" msgstr "Nội dung" -#: judge/models/problem.py:169 +#: judge/models/problem.py:174 msgid "creators" msgstr "" -#: judge/models/problem.py:173 +#: judge/models/problem.py:178 msgid "These users will be able to edit the problem, and be listed as authors." msgstr "" "Những người dùng này sẽ có thể chỉnh sửa bài tập, và nằm trong danh sách các " "tác giả" -#: judge/models/problem.py:178 +#: judge/models/problem.py:183 msgid "curators" msgstr "" -#: judge/models/problem.py:182 +#: judge/models/problem.py:187 msgid "" "These users will be able to edit the problem, but not be listed as authors." msgstr "" "Những người dùng này sẽ có thể chỉnh sửa bài tập, nhưng không nằm trong danh " "sách các tác giả" -#: judge/models/problem.py:188 +#: judge/models/problem.py:193 msgid "testers" msgstr "" -#: judge/models/problem.py:192 +#: judge/models/problem.py:197 msgid "These users will be able to view the private problem, but not edit it." msgstr "" "Những người dùng này sẽ thấy được bài tập này (dù riêng tư), nhưng không " "chỉnh sửa được" -#: judge/models/problem.py:198 judge/models/volunteer.py:29 +#: judge/models/problem.py:203 judge/models/volunteer.py:29 msgid "The type of problem, as shown on the problem's page." msgstr "Dạng bài, giống như trên trang bài tập" -#: judge/models/problem.py:204 +#: judge/models/problem.py:209 msgid "The group of problem, shown under Category in the problem list." msgstr "Nhóm bài, hiện ở mục Nhóm bài trong danh sách bài tập" -#: judge/models/problem.py:209 +#: judge/models/problem.py:214 msgid "" "The time limit for this problem, in seconds. Fractional seconds (e.g. 1.5) " "are supported." @@ -1440,11 +1444,11 @@ msgstr "" "Giới hạn thời gian cho bài tập này, theo đơn vị giây. Có thể nhập số thực " "(ví dụ 1.5)" -#: judge/models/problem.py:218 judge/models/problem.py:639 +#: judge/models/problem.py:223 judge/models/problem.py:644 msgid "memory limit" msgstr "Giới hạn bộ nhớ" -#: judge/models/problem.py:220 +#: judge/models/problem.py:225 msgid "" "The memory limit for this problem, in kilobytes (e.g. 256mb = 262144 " "kilobytes)." @@ -1452,7 +1456,7 @@ msgstr "" "Giới hạn bộ nhớ cho bài này, theo đơn vị kilobytes (ví dụ 256mb = 262144 " "kilobytes)" -#: judge/models/problem.py:232 +#: judge/models/problem.py:237 msgid "" "Points awarded for problem completion. Points are displayed with a 'p' " "suffix if partial." @@ -1460,155 +1464,155 @@ msgstr "" "Điểm thưởng khi hoàn thành bài tập. Điểm có thêm chữ 'p' ở sau cùng nếu như " "chấp nhận cho điểm thành phần (có điểm ngay khi không đúng toàn bộ test)" -#: judge/models/problem.py:238 +#: judge/models/problem.py:243 msgid "allows partial points" msgstr "cho phép điểm thành phần" -#: judge/models/problem.py:242 +#: judge/models/problem.py:247 msgid "allowed languages" msgstr "các ngôn ngữ được cho phép" -#: judge/models/problem.py:243 +#: judge/models/problem.py:248 msgid "List of allowed submission languages." msgstr "Danh sách các ngôn ngữ lập trình cho phép" -#: judge/models/problem.py:249 +#: judge/models/problem.py:254 msgid "manually managed" msgstr "" -#: judge/models/problem.py:252 +#: judge/models/problem.py:257 msgid "Whether judges should be allowed to manage data or not." msgstr "" -#: judge/models/problem.py:255 +#: judge/models/problem.py:260 msgid "date of publishing" msgstr "Ngày công bố" -#: judge/models/problem.py:260 +#: judge/models/problem.py:265 msgid "" "Doesn't have magic ability to auto-publish due to backward compatibility" msgstr "" -#: judge/models/problem.py:267 +#: judge/models/problem.py:272 msgid "Bans the selected users from submitting to this problem." msgstr "Cấm những người dùng được chọn nộp bài tập này." -#: judge/models/problem.py:274 +#: judge/models/problem.py:279 msgid "The license under which this problem is published." msgstr "Giấy phép xuất bản bài tập" -#: judge/models/problem.py:281 +#: judge/models/problem.py:286 msgid "problem summary" msgstr "Tóm tắt bài tập" -#: judge/models/problem.py:287 +#: judge/models/problem.py:292 msgid "number of users" msgstr "" -#: judge/models/problem.py:289 +#: judge/models/problem.py:294 msgid "The number of users who solved the problem." msgstr "Số lượng người dùng đã giải được bài" -#: judge/models/problem.py:291 +#: judge/models/problem.py:296 msgid "solve rate" msgstr "Tỉ lệ giải đúng" -#: judge/models/problem.py:300 +#: judge/models/problem.py:305 msgid "If private, only these organizations may see the problem." msgstr "Nếu bài riêng tư, chỉ những tổ chức này thấy được" -#: judge/models/problem.py:306 +#: judge/models/problem.py:311 msgid "pdf statement" msgstr "Đề bài bằng file pdf" -#: judge/models/problem.py:598 judge/models/problem.py:629 -#: judge/models/problem.py:660 judge/models/runtime.py:161 +#: judge/models/problem.py:603 judge/models/problem.py:634 +#: judge/models/problem.py:665 judge/models/runtime.py:161 msgid "language" msgstr "" -#: judge/models/problem.py:601 +#: judge/models/problem.py:606 msgid "translated name" msgstr "" -#: judge/models/problem.py:603 +#: judge/models/problem.py:608 msgid "translated description" msgstr "" -#: judge/models/problem.py:607 +#: judge/models/problem.py:612 msgid "problem translation" msgstr "" -#: judge/models/problem.py:608 +#: judge/models/problem.py:613 msgid "problem translations" msgstr "" -#: judge/models/problem.py:613 +#: judge/models/problem.py:618 msgid "clarified problem" msgstr "" -#: judge/models/problem.py:615 +#: judge/models/problem.py:620 msgid "clarification body" msgstr "" -#: judge/models/problem.py:617 +#: judge/models/problem.py:622 msgid "clarification timestamp" msgstr "" -#: judge/models/problem.py:648 +#: judge/models/problem.py:653 msgid "language-specific resource limit" msgstr "" -#: judge/models/problem.py:649 +#: judge/models/problem.py:654 msgid "language-specific resource limits" msgstr "" -#: judge/models/problem.py:662 judge/models/submission.py:246 +#: judge/models/problem.py:667 judge/models/submission.py:246 msgid "source code" msgstr "mã nguồn" -#: judge/models/problem.py:666 +#: judge/models/problem.py:671 msgid "language-specific template" msgstr "" -#: judge/models/problem.py:667 +#: judge/models/problem.py:672 msgid "language-specific templates" msgstr "" -#: judge/models/problem.py:674 +#: judge/models/problem.py:679 msgid "associated problem" msgstr "" -#: judge/models/problem.py:680 +#: judge/models/problem.py:685 msgid "publish date" msgstr "" -#: judge/models/problem.py:682 +#: judge/models/problem.py:687 msgid "editorial content" msgstr "nội dung lời giải" -#: judge/models/problem.py:696 +#: judge/models/problem.py:701 msgid "solution" msgstr "lời giải" -#: judge/models/problem.py:697 +#: judge/models/problem.py:702 msgid "solutions" msgstr "lời giải" -#: judge/models/problem.py:702 +#: judge/models/problem.py:707 #, fuzzy #| msgid "point value" msgid "proposed point value" msgstr "điểm" -#: judge/models/problem.py:703 +#: judge/models/problem.py:708 msgid "The amount of points you think this problem deserves." msgstr "Bạn nghĩ bài này đáng bao nhiêu điểm?" -#: judge/models/problem.py:717 +#: judge/models/problem.py:722 msgid "The time this vote was cast" msgstr "" -#: judge/models/problem.py:723 +#: judge/models/problem.py:728 msgid "vote" msgstr "" @@ -2891,41 +2895,41 @@ msgstr "Hướng dẫn cho {0}" msgid "Editorial for {0}" msgstr "Hướng dẫn cho {0}" -#: judge/views/problem.py:428 templates/contest/contest.html:79 +#: judge/views/problem.py:426 templates/contest/contest.html:79 #: templates/organization/org-left-sidebar.html:4 #: templates/user/user-about.html:28 templates/user/user-tabs.html:5 #: templates/user/users-table.html:29 msgid "Problems" msgstr "Bài tập" -#: judge/views/problem.py:798 +#: judge/views/problem.py:796 msgid "Problem feed" msgstr "Bài tập" -#: judge/views/problem.py:1032 +#: judge/views/problem.py:1030 msgid "Banned from submitting" msgstr "Bị cấm nộp bài" -#: judge/views/problem.py:1034 +#: judge/views/problem.py:1032 msgid "" "You have been declared persona non grata for this problem. You are " "permanently barred from submitting this problem." msgstr "Bạn đã bị cấm nộp bài này." -#: judge/views/problem.py:1057 +#: judge/views/problem.py:1055 msgid "Too many submissions" msgstr "Quá nhiều lần nộp" -#: judge/views/problem.py:1059 +#: judge/views/problem.py:1057 msgid "You have exceeded the submission limit for this problem." msgstr "Bạn đã vượt quá số lần nộp cho bài này." -#: judge/views/problem.py:1138 judge/views/problem.py:1143 +#: judge/views/problem.py:1136 judge/views/problem.py:1141 #, python-format msgid "Submit to %(problem)s" msgstr "Nộp bài cho %(problem)s" -#: judge/views/problem.py:1166 +#: judge/views/problem.py:1164 msgid "Clone Problem" msgstr "Nhân bản bài tập"