Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Tuple Index-Based Key Construction | T(n log n), S(n) solution in Speedy category for Sort by Extension by mmartsinenko
def sort_by_ext(files: list[str]) -> list[str]:
"""
Sort files by:
1. Extension (alphabetically, files without extensions come first).
2. Filename (alphabetically for files with the same extension).
Time Complexity: O(n log n) for sorting.
Space Complexity: O(n) for the sorted output.
"""
def extract_key(file: str):
# Handle edge cases inline
if file.startswith('.') and file.count('.') == 1:
return ('', file)
idx = file.rfind('.')
if idx == -1:
return ('', file.lower()) # No extension
return (file[idx + 1:].lower(), file[:idx].lower()) # (extension, name)
return sorted(files, key=extract_key)
print("Example:")
print(sort_by_ext(["1.cad", "1.bat", "1.aa"]))
# These "asserts" are used for self-checking
assert sort_by_ext(["1.cad", "1.bat", "1.aa"]) == ["1.aa", "1.bat", "1.cad"]
assert sort_by_ext(["1.cad", "1.bat", "1.aa", "2.bat"]) == [
"1.aa",
"1.bat",
"2.bat",
"1.cad",
]
assert sort_by_ext(["1.cad", "1.bat", "1.aa", ".bat"]) == [
".bat",
"1.aa",
"1.bat",
"1.cad",
]
assert sort_by_ext(["1.cad", "1.bat", ".aa", ".bat"]) == [
".aa",
".bat",
"1.bat",
"1.cad",
]
assert sort_by_ext(["1.cad", "1.", "1.aa"]) == ["1.", "1.aa", "1.cad"]
assert sort_by_ext(["1.cad", "1.bat", "1.aa", "1.aa.doc"]) == [
"1.aa",
"1.bat",
"1.cad",
"1.aa.doc",
]
assert sort_by_ext(["1.cad", "1.bat", "1.aa", ".aa.doc"]) == [
"1.aa",
"1.bat",
"1.cad",
".aa.doc",
]
print("The mission is done! Click 'Check Solution' to earn rewards!")
Dec. 8, 2024