Племянник через три дня идёт на муниципалку по информатике.
Язык: Python.
Посмотрел задачи прошлого года- для 10 класса это слишком.
Кому не сложно, объясните, как работает код следующей задачи. Буду нереально благодарен:)
Я бы принимая строки с полом ростом, составлял бы два списка: рост мальчиков и рост девочек. Потом отсортировал бы их по убыванию и сложил , чтобы получить список шеренги. После чего прошёлся бы по всему списку (начиная со второго элемента), сравнивая текущее значение роста с предыдущим, и если разница в росте больше предыдущего "рекорда", обновлял бы рекордную разницу. Вот, где-так :)
А не проще ли прочитать данные в список кортежей и отсортировать его (только надо ключ сортировки задать правильно, поскольку мальчики это нули?. А потом за одну строчку найти максимум:
if __name__ == '__main__':
people = [(0, 120), (1, 130), (1, 142), (1, 115), (0, 145), (0, 134)]
people.sort(key=lambda x: (x[0], -x[1]))
print(max([abs(h1-h2) for (s1, h1), (s2, h2) in zip(people[:-1], people[1:])]))
Дмитрий, Дмитрий, можете пожалуйста написать код для программы?
Я окончательно понял, как она работает и мне осталось изучить составляющие кода.
Заранее спасибо.
Daniil Bakhin, я набросал код по той, схеме, как озвучил в ответе словами - он не оптимальный (смотрите комментарии к моему ответу - там дело говорят). Но если Вам для разобраться, то так будет яснее (я даже сортировку по убыванию сделал, чтобы было уже точь в точь с описанием):
with open('gym.in', 'r') as inp:
data = inp.readlines()
boys, girls = [],[]
for i in range(int(data[0])):
sex, height = data[i+1].split()
if sex == '0':
boys.append(int(height))
elif sex == '1':
girls.append(int(height))
children = sorted(boys, reverse=True) + sorted(girls, reverse=True)
max_difference = 0
for i in range(1,len(children)):
difference = abs(children[i] - children[i-1])
if difference > max_difference:
max_difference = difference
with open('gym.out', 'w') as out:
out.write(str(max_difference))
Дмитрий, спасибо за помощь)
Видимо я не силён в данном языке, пора бы уже мне переходить с уровня beginner))
Не понял, что сделано в самом начале, но уж ладно.
Daniil Bakhin,
№ строки:
1-2. я открыл файл из условия 'gym.in' и считал его построчно;
3. подготовил два списка;
4-9. в цикле на 6 итераций (первая строка файла - теперь уже списка - 6) перебрал все строки, разбивая каждую на пол и рост и добавляя в тот или иной список по признаку пола;
10. сложил оба полученных списка, предварительно отсортировав каждый;
11. подготовил переменную для ответа;
12-15. в цикле по списку всех (со второго) учащихся проверял рост с ростом предыдущего, и если разница по модулю была больше значения переменной ответа, менял её на текущее значение;
16-17. создал файл с результатом 'gym.out' (как требовалось в условии), в который записал единственную строку - получившийся ответ по результату прохождения суммарного списка.