n | from typing import MutableSequence, Protocol, Any, Sized, Callable | n | from typing import Any, Callable, MutableSequence, Protocol, Sized |
| | | |
| class Comparable(Protocol): | | class Comparable(Protocol): |
| | | |
| def __lt__(self, other: Any) -> bool: | | def __lt__(self, other: Any) -> bool: |
| pass | | pass |
| Sortable = MutableSequence[Comparable] | | Sortable = MutableSequence[Comparable] |
| | | |
| def defkey(element: Comparable) -> Comparable: | | def defkey(element: Comparable) -> Comparable: |
| if isinstance(element, Sized): | | if isinstance(element, Sized): |
| return len(element) | | return len(element) |
| return element | | return element |
| | | |
| def strictsort(seq: Sortable, key: Callable[[Comparable], Comparable]=de | | def strictsort(seq: Sortable, key: Callable[[Comparable], Comparable]=de |
| fkey) -> Sortable: | | fkey) -> Sortable: |
| for i in range(len(seq) - 1): | | for i in range(len(seq) - 1): |
| for j in range(i + 1, len(seq)): | | for j in range(i + 1, len(seq)): |
t | if key(seq[j]) < key(seq[i]): | t | if key(seq[i]) > key(seq[j]): |
| seq[i], seq[j] = (seq[j], seq[i]) | | seq[i], seq[j] = (seq[j], seq[i]) |
| return seq | | return seq |