From 138c4d9d2f945273106f7ea182f6f6f2cbc019ff Mon Sep 17 00:00:00 2001 From: malevitzch Date: Wed, 26 Nov 2025 18:06:02 +0100 Subject: [PATCH 1/2] Fixed how the time limits are displayed in the problems tab, they no longer sometimes randomly appear in scientific format. The memory limits are now displayed in mebibytes rather than megabytes since this seems more consistent with what package authors put in statement descriptions. --- oioioi/contests/utils.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) 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}" From d1f0d39ed244221890dde696a232b5613a55123d Mon Sep 17 00:00:00 2001 From: malevitzch Date: Mon, 15 Dec 2025 13:00:44 +0100 Subject: [PATCH 2/2] Updated the stringify limits test to work with MiB rather than MB --- oioioi/contests/tests/tests.py | 54 +++++++++++++++++----------------- 1 file changed, 27 insertions(+), 27 deletions(-) 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")