Сортировка массивов: sort и argsort
Содержание курса
Турнирная таблица: сортировка участников по оценке через argsort
Рейтинг олимпиады
Организационный комитет ежегодной городской олимпиады по математике завершил проверку работ. Каждый участник получил целочисленную оценку — количество набранных баллов. Оценки у всех разные: система проверки устроена так, что ничья невозможна. Теперь нужно сформировать итоговую турнирную таблицу: список участников, упорядоченный от наименьшего результата к наибольшему.
Почему от наименьшего? Оргкомитет придерживается традиции «восходящего рейтинга»: в финальном протоколе первым идёт участник с минимальным баллом, а победитель — в самом конце. Это удобно для последующей рассылки: письма с поздравлениями отправляются в обратном порядке чтения таблицы, и победитель получает своё письмо последним — в торжественный момент церемонии.
Откуда берутся данные
Секретарь олимпиады формирует два списка в том порядке, в котором участники сдавали работы:
- список имён участников;
- список оценок — по одной на каждого участника, в той же позиции.
Например, если Алиса сдала работу первой и получила 72 балла, то в списке имён на первом месте стоит «Алиса», а в списке оценок на первом месте стоит 72. Важно, что порядок сдачи работ не несёт смысловой нагрузки — он случаен.
Что требуется от программы
Программа-помощник секретаря должна принять оба списка и выдать четыре строки итогового протокола.
Первая строка — это перестановочный индекс: для каждой позиции в отсортированном рейтинге указывается, какой номер (считая с нуля) имел соответствующий участник в исходном списке сдачи работ. Эта строка нужна техническому отделу для сверки с архивом бумажных работ.
Вторая строка — отсортированные оценки участников: от минимальной к максимальной. Бухгалтерия использует её для расчёта призового фонда.
Третья строка — имена участников в том же порядке, что и отсортированные оценки. Это и есть сам рейтинг, который вывешивается на доску объявлений.
Четвёртая строка — техническая метка формата: она фиксирует размерность каждого из трёх результирующих массивов. Системный администратор использует её для автоматической валидации файла перед загрузкой в базу данных. Метка имеет строго определённый вид: shape idx=(n,) scores_sorted=(n,) names_sorted=(n,), где вместо n подставляется конкретное число участников.
Важное техническое ограничение
Программа не должна изменять исходные списки имён и оценок — они могут понадобиться секретарю позже в исходном виде (например, для формирования справок в порядке сдачи работ). Поэтому сортировка выполняется через вычисление индекса перестановки (np.argsort), который возвращает новый массив и не затрагивает исходные данные.
Формальный контракт
Входные данные (stdin):
n
name_0 name_1 ... name_{n-1}
score_0 score_1 ... score_{n-1}
- Первая строка — целое число
n(количество участников). - Вторая строка —
nимён через пробел; читается как одномерный массивnp.array. - Третья строка —
nпопарно различных целых чисел через пробел (оценки); читается какnp.array(..., dtype=int).
Действия:
- Вычислить
idx = np.argsort(scores)— массив индексов, упорядочивающих оценки по возрастанию. - Применить
idxкscoresи кnamesчерез fancy indexing, получивscores_sortedиnames_sorted. - Убедиться, что исходные
scoresиnamesне изменились.
Выходные данные (stdout) — ровно четыре строки:
idx_0 idx_1 ... idx_{n-1}
score_sorted_0 score_sorted_1 ... score_sorted_{n-1}
name_sorted_0 name_sorted_1 ... name_sorted_{n-1}
shape idx=(n,) scores_sorted=(n,) names_sorted=(n,)
- Элементы в строках 1–3 разделены одиночными пробелами.
- В строке 4 вместо
nстоит конкретное число участников, например(5,)приn=5. - Никаких дополнительных строк, пробелов в конце строк или пустых строк выводить не нужно.
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
5 Алиса Борис Вера Глеб Дина 72 45 91 60 83
Ожидаемый вывод1 3 0 4 2 45 60 72 83 91 Борис Глеб Алиса Дина Вера shape idx=(5,) scores_sorted=(5,) names_sorted=(5,)
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
