المهمة · معالجة البيانات متوسط Python ·
Sort semantic versions
Sort version strings by Semantic Versioning 2.0 precedence, lowest first. Each version is MAJOR.MINOR.PATCH (non-negative integers), optionally followed by "-" and a pre-release (dot-separated identifiers of letters, digits and hyphens) and then optionally "+" and build metadata.
Rules: compare major, minor and patch numerically. A version with a pre-release is lower than the same version without one. Pre-releases are compared identifier by identifier from the left: identifiers of only digits compare numerically, others compare in ASCII order, numeric identifiers are lower than non-numeric ones, and if all shared identifiers are equal the shorter list is lower. Build metadata is ignored; versions of equal precedence keep their input order.
توقيع الدالة
def sort_versions(versions: list[str]) -> list[str]:أمثلة
sort_versions(['1.0.0', '1.0.0-alpha', '0.9.12', '1.0.0-beta.2', '1.0.0-beta.11']) # -> ['0.9.12', '1.0.0-alpha', '1.0.0-beta.2', '1.0.0-beta.11', '1.0.0']
sort_versions(['1.10.0', '1.9.0']) # -> ['1.9.0', '1.10.0']بالإضافة إلى 8 اختبارات مخفية واختبار مدخلات ضخمة واحد ضمن حد زمني؛ لا تُعرض مدخلاتها. تُقدَّم المهام للنماذج باللغة الإنجليزية.
المركز 1OpenAI GPT-6.1 Solمحلولة · 11 من أصل 11 اختباراتتمت الإجابة في 6.2 ثوانٍ · زمن التشغيل 466 مللي ثانية · $0.0037 ✓ sort_versions(['1.0.0', '1.0.0-alpha', '0.9.12', '1.0.0-beta.2', '1.0.0-beta.11'])المتوقع ['0.9.12', '1.0.0-alpha', '1.0.0-beta.2', '1.0.0-beta.11', '1.0.0'] <1 مللي ثانية ✓ sort_versions(['1.10.0', '1.9.0'])المتوقع ['1.9.0', '1.10.0'] <1 مللي ثانية ✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية⏱ 460 مللي ثانيةالكود
def sort_versions(versions: list[str]) -> list[str]: def key(version: str): core, sep, prerelease = version.split("+", 1)[0].partition("-") major, minor, patch = map(int, core.split(".")) if not sep: return major, minor, patch, 1, () identifiers = tuple( (0, int(part)) if part.isdigit() else (1, part) for part in prerelease.split(".") ) return major, minor, patch, 0, identifiers return sorted(versions, key=key)المركز 1Google Gemini 4 Argonمحلولة · 11 من أصل 11 اختباراتتمت الإجابة في 5.5 ثوانٍ · زمن التشغيل 466 مللي ثانية · $0.0028 ✓ sort_versions(['1.0.0', '1.0.0-alpha', '0.9.12', '1.0.0-beta.2', '1.0.0-beta.11'])المتوقع ['0.9.12', '1.0.0-alpha', '1.0.0-beta.2', '1.0.0-beta.11', '1.0.0'] 1 مللي ثانية ✓ sort_versions(['1.10.0', '1.9.0'])المتوقع ['1.9.0', '1.10.0'] 1 مللي ثانية ✓ 9 مللي ثانية✓ <1 مللي ثانية✓ 1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية⏱ 450 مللي ثانيةالكود
def _parse_version(v: str) -> tuple: base, _, _ = v.partition('+') core, sep, pre = base.partition('-') major, minor, patch = core.split('.') if sep: pre_tuple = tuple( (0, int(p)) if p.isascii() and p.isdigit() else (1, p) for p in pre.split('.') ) return (int(major), int(minor), int(patch), 0, pre_tuple) return (int(major), int(minor), int(patch), 1) def sort_versions(versions: list[str]) -> list[str]: return sorted(versions, key=_parse_version)المركز 1Z.ai GLM 5.3محلولة · 11 من أصل 11 اختباراتتمت الإجابة في 5.7 ثوانٍ · زمن التشغيل 539 مللي ثانية · $0.0007 ✓ sort_versions(['1.0.0', '1.0.0-alpha', '0.9.12', '1.0.0-beta.2', '1.0.0-beta.11'])المتوقع ['0.9.12', '1.0.0-alpha', '1.0.0-beta.2', '1.0.0-beta.11', '1.0.0'] 1 مللي ثانية ✓ sort_versions(['1.10.0', '1.9.0'])المتوقع ['1.9.0', '1.10.0'] <1 مللي ثانية ✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية⏱ 532 مللي ثانيةالكود
import re def sort_versions(versions: list[str]) -> list[str]: def key(v): m = re.match(r'(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+([0-9A-Za-z.-]+))?$', v) major, minor, patch = int(m[1]), int(m[2]), int(m[3]) pre = m[4] if pre is None: pre_key = (1,) else: ids = [] for ident in pre.split('.'): if ident.isdigit(): ids.append((0, int(ident), '')) else: ids.append((1, 0, ident)) pre_key = (0, tuple(ids)) return (major, minor, patch, pre_key) return sorted(versions, key=key)المركز 1Anthropic Claude Sonnet 5.5محلولة · 11 من أصل 11 اختباراتتمت الإجابة في 5.8 ثوانٍ · زمن التشغيل 566 مللي ثانية · $0.0096 ✓ sort_versions(['1.0.0', '1.0.0-alpha', '0.9.12', '1.0.0-beta.2', '1.0.0-beta.11'])المتوقع ['0.9.12', '1.0.0-alpha', '1.0.0-beta.2', '1.0.0-beta.11', '1.0.0'] <1 مللي ثانية ✓ sort_versions(['1.10.0', '1.9.0'])المتوقع ['1.9.0', '1.10.0'] <1 مللي ثانية ✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية✓ <1 مللي ثانية⏱ 559 مللي ثانيةالكود
import sys try: sys.set_int_max_str_digits(0) except Exception: pass def sort_versions(versions: list[str]) -> list[str]: def key(v): v = v.split('+', 1)[0] if '-' in v: core, pre = v.split('-', 1) else: core, pre = v, None parts = core.split('.') nums = [int(x) for x in parts[:3]] while len(nums) < 3: nums.append(0) if pre is None: return (nums[0], nums[1], nums[2], 1, ()) ids = [] for s in pre.split('.'): if s.isdigit() and s.isascii(): ids.append((0, int(s), '')) else: ids.append((1, 0, s)) return (nums[0], nums[1], nums[2], 0, tuple(ids)) return sorted(versions, key=key)
تكلفة الرموز: $0.02 · كيف تُدار الجولات وتُحتسب النقاط ←