diff --git a/oioioi/contests/templates/contests/problems_list.html b/oioioi/contests/templates/contests/problems_list.html
index e81e7e343..569ff0ce3 100644
--- a/oioioi/contests/templates/contests/problems_list.html
+++ b/oioioi/contests/templates/contests/problems_list.html
@@ -13,7 +13,7 @@
animation-iteration-count: 6;
background-color: rgba(255, 255, 0 , .4);
}
-
+
@keyframes target-glow {
0%, 100% {
background-color: rgba(255, 255, 0 , .4);
@@ -24,6 +24,12 @@
box-shadow: 0px 0px 4px 6px rgba(255, 255, 0, .8);
}
}
+
+ td.problem-limits-column {
+ white-space: nowrap;
+ overflow-wrap: break-word;
+ text-align: left;
+ }
{% endblock %}
@@ -60,9 +66,15 @@
{% trans "Problems" %}
|
{% trans "Name" %} |
{% if show_problems_limits %}
-
- {% trans "Limits" %}
- |
+ {% if multiple_limits %}
+
+ {% trans "Limits" %}
+ |
+ {% else %}
+
+ {% trans "Limits" %}
+ |
+ {% endif %}
{% endif %}
{% if show_submissions_limit %}
@@ -102,21 +114,34 @@ {% trans "Problems" %}
{% endif %}
{% if show_problems_limits %}
- |
- {% if problem_limits %}
-
- {% for row in problem_limits %}
-
- {% for entry in row %}
- |
- {{ entry }}
- |
- {% endfor %}
-
- {% endfor %}
-
+ {% if multiple_limits %}
+ |
+ {% if problem_limits %}
+
+ {% for row in problem_limits %}
+
+ {% for entry in row %}
+ |
+ {{ entry }}
+ |
+ {% endfor %}
+
+ {% endfor %}
+
+ {% endif %}
+ |
+ {% else %}
+ {% if problem_limits and problem_limits.0 %}
+
+ {{ problem_limits.0.1 }}
+ |
+
+ {{ problem_limits.0.2 }}
+ |
+ {% else %}
+ |
{% endif %}
-
+ {% endif %}
{% endif %}
{% if show_submissions_limit %}
diff --git a/oioioi/contests/tests/tests.py b/oioioi/contests/tests/tests.py
index 9c15e4e7c..cac8033ff 100755
--- a/oioioi/contests/tests/tests.py
+++ b/oioioi/contests/tests/tests.py
@@ -4904,30 +4904,30 @@ def __init__(self, timestamp, contest):
def test_stringify_limits(self):
raw_limits = {
"1": {
- "default": (1000, 2000, 1000, 2000),
- "cpp": (1000, 2000, 1000, 2000),
- "py": (1000, 2000, 1000, 2000),
+ "default": (1000, 2000, 1024, 2048),
+ "cpp": (1000, 2000, 1024, 2048),
+ "py": (1000, 2000, 1024, 2048),
},
- "2": {"default": (2000, 4000, 2000, 4000), "cpp": (1000, 3000, 1000, 4000), "py": (3000, 5000, 2000, 5000)},
+ "2": {"default": (2000, 4000, 2048, 4096), "cpp": (1000, 3000, 1024, 4096), "py": (3000, 5000, 2048, 5120)},
"3": {
- "default": (1000, 2000, 1000, 2000),
- "cpp": (500, 2000, 500, 1000),
- "py": (1000, 3000, 1000, 3000),
+ "default": (1000, 2000, 1024, 2048),
+ "cpp": (500, 2000, 512, 1024),
+ "py": (1000, 3000, 1024, 3072),
},
"4": {
- "default": (1000, 2000, 1000, 2000),
- "cpp": (500, 2000, 2000, 3000),
- "py": (1000, 2000, 1000, 2000),
+ "default": (1000, 2000, 1024, 2048),
+ "cpp": (500, 2000, 2048, 3072),
+ "py": (1000, 2000, 1024, 2048),
},
"5": {
- "default": (1000, 2000, 1000, 2000),
- "cpp": (1000, 2000, 1000, 2000),
- "py": (3000, 4000, 1000, 3000),
+ "default": (1000, 2000, 1024, 2048),
+ "cpp": (1000, 2000, 1024, 2048),
+ "py": (3000, 4000, 1024, 3072),
},
"6": {
- "default": (1000, 2000, 500, 2000),
- "cpp": (100, 500, 100, 200),
- "py": (1000, 2000, 500, 2000),
+ "default": (1000, 2000, 512, 2048),
+ "cpp": (100, 500, 128, 256),
+ "py": (1000, 2000, 512, 2048),
},
}
@@ -4937,49 +4937,49 @@ def test_stringify_limits(self):
self.assertEqual(len(stringified["1"]), 1)
self.assertEqual(stringified["1"][0][0], "")
self.assertEqual(stringified["1"][0][1], "1-2 s")
- self.assertEqual(stringified["1"][0][2], "1-2 MB")
+ self.assertEqual(stringified["1"][0][2], "1-2 MiB")
# Test two simple overrides
self.assertEqual(len(stringified["2"]), 2)
self.assertEqual(stringified["2"][0][0], "C++:")
self.assertEqual(stringified["2"][0][1], "1-3 s")
- self.assertEqual(stringified["2"][0][2], "1-4 MB")
+ self.assertEqual(stringified["2"][0][2], "1-4 MiB")
self.assertEqual(stringified["2"][1][0], "Python:")
self.assertEqual(stringified["2"][1][1], "3-5 s")
- self.assertEqual(stringified["2"][1][2], "2-5 MB")
+ self.assertEqual(stringified["2"][1][2], "2-5 MiB")
# Test two overrides, one with small memory limit
self.assertEqual(len(stringified["3"]), 2)
self.assertEqual(stringified["3"][0][0], "C++:")
self.assertEqual(stringified["3"][0][1], "0.5-2 s")
- self.assertEqual(stringified["3"][0][2], "500-1000 KiB")
+ self.assertEqual(stringified["3"][0][2], "512-1024 KiB")
self.assertEqual(stringified["3"][1][0], "Python:")
self.assertEqual(stringified["3"][1][1], "1-3 s")
- self.assertEqual(stringified["3"][1][2], "1-3 MB")
+ self.assertEqual(stringified["3"][1][2], "1-3 MiB")
# Test one override, cpp
self.assertEqual(len(stringified["4"]), 2)
self.assertEqual(stringified["4"][0][0], "Default:")
self.assertEqual(stringified["4"][0][1], "1-2 s")
- self.assertEqual(stringified["4"][0][2], "1-2 MB")
+ self.assertEqual(stringified["4"][0][2], "1-2 MiB")
self.assertEqual(stringified["4"][1][0], "C++:")
self.assertEqual(stringified["4"][1][1], "0.5-2 s")
- self.assertEqual(stringified["4"][1][2], "2-3 MB")
+ self.assertEqual(stringified["4"][1][2], "2-3 MiB")
# Test one override, python
self.assertEqual(len(stringified["5"]), 2)
self.assertEqual(stringified["5"][0][0], "Default:")
self.assertEqual(stringified["5"][0][1], "1-2 s")
- self.assertEqual(stringified["5"][0][2], "1-2 MB")
+ self.assertEqual(stringified["5"][0][2], "1-2 MiB")
self.assertEqual(stringified["5"][1][0], "Python:")
self.assertEqual(stringified["5"][1][1], "3-4 s")
- self.assertEqual(stringified["5"][1][2], "1-3 MB")
+ self.assertEqual(stringified["5"][1][2], "1-3 MiB")
# Test small memory limits
self.assertEqual(len(stringified["6"]), 2)
self.assertEqual(stringified["6"][0][0], "Default:")
self.assertEqual(stringified["6"][0][1], "1-2 s")
- self.assertEqual(stringified["6"][0][2], "500-2000 KiB")
+ self.assertEqual(stringified["6"][0][2], "512-2048 KiB")
self.assertEqual(stringified["6"][1][0], "C++:")
self.assertEqual(stringified["6"][1][1], "0.1-0.5 s")
- self.assertEqual(stringified["6"][1][2], "100-200 KiB")
+ self.assertEqual(stringified["6"][1][2], "128-256 KiB")
diff --git a/oioioi/contests/utils.py b/oioioi/contests/utils.py
index dd3954128..a48fad4a8 100755
--- a/oioioi/contests/utils.py
+++ b/oioioi/contests/utils.py
@@ -819,23 +819,33 @@ def stringify_problems_limits(raw_limits):
- For mixed limits (one language differs): (('Default:', time_limit, memory_limit), language_limits)
"""
- def KiB_to_MB(KiBs):
- return (KiBs * 1024) // 1000000
+ def KiB_to_MiB(KiBs):
+ return (KiBs) // 1024
+
+ def ms_to_seconds(ms: int) -> str:
+ seconds: int = ms // 1000
+ ms %= 1000
+ if ms == 0:
+ return str(seconds)
+ return f"{seconds}.{str(ms).rjust(3, '0').rstrip('0')}"
def format_limits(pi_limits):
- time_lower = f"{pi_limits[0] / 1000:.1g}"
- time_higher = f"{pi_limits[1] / 1000:.1g}"
+ lower_ms = pi_limits[0]
+ higher_ms = pi_limits[1]
+
+ time_lower = ms_to_seconds(lower_ms)
+ time_higher = ms_to_seconds(higher_ms)
- time_limit = f"{time_lower} s" if time_lower == time_higher else f"{time_lower}-{time_higher} s"
+ time_limit = f"{time_lower} s" if lower_ms == higher_ms else f"{time_lower}-{time_higher} s"
- if pi_limits[2] < 1000000 / 1024: # lower memory limit is smaller than 1MB, display KiB
+ if pi_limits[2] < 1024: # lower memory limit is smaller than 1MiB, display KiB
unit = "KiB"
memory_lower = pi_limits[2]
memory_higher = pi_limits[3]
else:
- unit = "MB"
- memory_lower = KiB_to_MB(pi_limits[2])
- memory_higher = KiB_to_MB(pi_limits[3])
+ unit = "MiB"
+ memory_lower = KiB_to_MiB(pi_limits[2])
+ memory_higher = KiB_to_MiB(pi_limits[3])
memory_limit = f"{memory_lower} {unit}" if memory_lower == memory_higher else f"{memory_lower}-{memory_higher} {unit}"
diff --git a/oioioi/contests/views.py b/oioioi/contests/views.py
index eca82f7c2..319d6c6d3 100755
--- a/oioioi/contests/views.py
+++ b/oioioi/contests/views.py
@@ -140,8 +140,13 @@ def problems_list_view(request):
show_problems_limits = controller.can_see_problems_limits(request)
problems_limits = {}
+
+ multiple_limits = False
if show_problems_limits:
problems_limits = stringify_problems_limits(controller.get_problems_limits(request))
+ for limit in problems_limits.values():
+ if len(limit) > 1:
+ multiple_limits = True
problem_instances = visible_problem_instances(request)
@@ -199,6 +204,7 @@ def problems_list_view(request):
"show_submit_button": show_submit_button,
"table_columns": table_columns,
"problems_on_page": getattr(settings, "PROBLEMS_ON_PAGE", 100),
+ "multiple_limits": multiple_limits,
},
)
|