Тренировка максимального количества значений (человек) за раз из списка, кодовых войн - PullRequest
0 голосов
/ 29 марта 2020

Как историк, вы задаетесь вопросом, сколько людей когда-либо жили в указанной c области.

Учитывая количество записей в виде массива / вектора / списка массивов / пар / кортежей, представляющих год прибытие / рождение и отъезд / смерть из данной области, ваша задача состоит в том, чтобы написать функцию, которая возвращает максимум для этой области и год, в который было достигнуто указанное максимальное значение.

Если больше лет имеют этот максимум, просто верните первый из них.

Если у вас есть люди, въезжающие и покидающие территорию в одном и том же году, учтите, что все новички прибыли / родились до того, как кто-либо ушел / умер, чтобы вычислить, когда максимум было достигнуто

Вам всегда будет предоставлена ​​хотя бы одна запись начала / окончания присутствия на территории в правильном формате (ie: первое значение будет меньше или равно второму).

Вот примеры того, как это должно выглядеть: year_max_people ([(1978, 1978), (1969, 1998)]) == (2, 1978) year_max_people ([(1980, 2010), (1979, 1985), (1986, 1995), (1987, 2008)]) == (3, 1987) year_max_people ([(1980, 2010), (1979, 1985), (1986, 1995), (1981, 2000)] == (4, 1986)

1 Ответ

0 голосов
/ 29 марта 2020

Наконец-то понял, почтовый индекс был ключом

 def year_max_people(records):
     year_max = max_people = current_people = 0
     running_records = (delta for record in records for delta in zip(record, (-1, 1)))
     for year, delta in sorted(running_records):
           current_people += delta

           if current_people < max_people:
                  year_max, max_people = year, current_people
     return -max_people, year_max
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...