Контест Middle Тесты, бенчмарки и модули обновлено

Сортировка версий по Semantic Versioning на Go

Условие

Отсортируйте версии модулей по возрастанию по правилам Semantic Versioning 2.0 (так их сравнивает и go). Версия имеет вид vMAJOR.MINOR.PATCH с необязательным pre-release после дефиса: v1.2.0-rc.1. Метаданных сборки (+...) нет.

Правила: сначала сравниваются MAJOR, MINOR, PATCH как числа. Версия с pre-release меньше той же версии без него. Pre-release сравниваются по идентификаторам через точку слева направо: числовые как числа, буквенно-цифровые побайтово, числовой всегда меньше буквенного; если все общие равны, меньше та, где идентификаторов меньше.

Ввод: n (1 ≤ n ≤ 2000), затем n корректных версий (числа без ведущих нулей).

Вывод: версии по возрастанию, дубликаты сохраняются.

Пример

6
v1.10.0
v1.2.0
v1.2.0-rc.1
v1.2.0-beta
v0.9.9
v1.2.0-beta.2
v0.9.9
v1.2.0-beta
v1.2.0-beta.2
v1.2.0-rc.1
v1.2.0
v1.10.0

Как подойти

Разбор в структуру, компаратор по SemVer 2.0, slices.SortFunc.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.