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

Упрощённый go mod tidy: лишние и недостающие модули

Условие

Смоделируйте проверку go mod tidy. Дан путь основного модуля, список require из go.mod и список импортов пакетов из кода.

Импорт относится к модулю, путь которого является его префиксом по границе сегмента (github.com/a/lib подходит для github.com/a/lib/client, но не для github.com/a/library). Если подходят несколько модулей, выбирается самый длинный путь. Импорты стандартной библиотеки (первый сегмент без точки) и пакеты основного модуля пропускаются.

Выведите missing N и отсортированные уникальные импорты, для которых не нашлось модуля, затем unused M и отсортированные модули из require, которым не принадлежит ни один импорт.

Ввод: путь модуля; r, затем r строк путь версия; m, затем m импортов (r ≤ 100, m ≤ 1000).

Пример

example.com/app
3
github.com/a/lib v1.0.0
github.com/a/lib/v2 v2.1.0
golang.org/x/sync v0.7.0
5
fmt
example.com/app/internal/db
github.com/a/lib/v2/client
github.com/b/tool
net/http
missing 1
github.com/b/tool
unused 2
github.com/a/lib
golang.org/x/sync

Как подойти

Мапа модулей, перебор префиксов импорта по слешам от длинного к короткому.

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

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