Сортировка версий по 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.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.