/
glukhov2008
/
Python
Обзор
Документация
Войти
/
glukhov2008
/
Python
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
crazy_team_lead.py
72 строки
6 KB
AndrewGluss
mix devs in pairs with min difference their rangs from OZON sandbox
26 авг 2022, 14:08
26 авг 2022, 14:08
121aa99
Код
Авторство
О чём код?
# В компании работает n разработчиков, где n — четное число. # Сумасшедший менеджер решил разбить всех разработчиков на команды по два человека. # Для этого он составил список всех разработчиков и назначил каждому из них номер по списку (от 1 до n) и # значение ai — уровень мастерства i-го в списке разработчика. # Очередную команду он составляет следующим образом: # первый разработчик в команде тот, кто идет первым в списке; # ему в пару подбирается такой, что разница их уровней минимальна (то есть минимально значение |ai−aj|, # где |x| — это модуль числа x); если таких кандидатов несколько, то выбирается из них тот, кто находится раньше в списке; # эти два разработчика образуют команду и удаляются из списка. # Например, если массив a равен [2,1,3,1,1,4], то формирование команд будет происходить следующим образом: # назначим разработчикам номера [1,2,3,4,5,6] в соответствии с их положением в списке, первый среди них имеет номер 1, # его уровень мастерства a1=2, подходящими (с минимальной абсолютной разностью) являются разработчики с номерами 2,3,4,5, # первый среди них 2, таким образом первая команда — это разработчики с номерами 1 и 2; # оставшиеся разработчики теперь имеют номера [3,4,5,6], первый среди них 3, его уровень a3=3, # разработчик с минимальной абсолютной разностью только один (номер 6), таким образом команда — разработчики с номерами 3 и 6; # оставшиеся разработчики имеют номера [4,5], первый среди них 4, его уровень a4=1, остался только разработчик с номером 5, # таким образом третья команда — разработчики с номерами 4 и 5. # Ваша задача — помочь сумасшедшему менеджеру промоделировать процесс разбиения на команды. # Обратите внимание, что команды должны быть выведены в порядке, описанном выше в условии. # # Входные данные # Первая строка содержит одно целое число t (1≤t≤50) — количество наборов входных данных. # # Первая строка каждого набора содержит одно целое число n (2≤n≤50; n четное) — количество разработчиков. # # Вторая строка содержит n целых чисел a1,a2,…,an (1≤ai≤100), где ai — уровень мастерства i-го разработчика. # # Выходные данные # Для каждого набора входных данных выведите n2 строк, i-я строка должна содержать пару чисел — # номер первого и второго разработчика в i-й команде в порядке, описанном в условии. # Выводите пустую строку между выводами для наборов входных данных. def pair_programming(rangs): """ Функция принимает на вход список рангов сотрудников и на выходы формирует список с парами рангов по минимальной разнице """ rangs_copy = rangs print("rangs_copy", rangs_copy) rangs_ind = [lens for lens in range(1, len(rangs_copy) + 1)] print("rangs_ind", rangs_ind) pair_prog = [] # финальный список с с парами индексов содрудников с минимальной разницей в ранге while len(rangs_copy) > 0: razn_rang = [] # список разниц рангов между i рангом и остальными до конца for i in range(1, len(rangs_copy)): # проходим по каждому рангу x = abs(rangs_copy[0] - rangs_copy[i]) # модуль разницы рангов 0 и i # print("разница между ", rangs_copy[0], "и ", rangs_copy[i], "равна ", x) razn_rang.append(x) # добавляем разницу в список # print('razn_rang', razn_rang) min_rang = min(razn_rang) # находим минимальный ранг среди всех # print('минимальный ранг ', min_rang) ind = razn_rang.index(min_rang) # находим индекс минимальной разницы # print('индекс минимальной разницы с минимальной разницей', ind) # print("индекс первого сотрудника", rangs_ind[0]) # print("индекс второго сотрудника", rangs_ind[ind + 1]) pair_prog.append([rangs_ind[0], rangs_ind[ind + 1]]) rangs_copy.pop(0) rangs_copy.pop(ind) # print("rangs_copy", rangs_copy) rangs_ind.pop(0) rangs_ind.pop(ind) # print("rangs_ind", rangs_ind) return pair_prog t = int(input()) # вводим количество наборов for i in range(t): n = int(input()) # вводим количество сотрудников, четное число rangs = [int(j) for j in input().split()] # список из вводимых рангов работников for pair in pair_programming(rangs): print(*pair, end='\n') print()