Недавно я суммировал возрасты себя, своей жены и детей и понял, что в какой-то момент в не слишком отдаленном будущем все наши возрасты составят ровно 100 лет.
Вызов
Для ввода, состоящего из комбинированного (общего) возраста и списка дат рождения, выведите дату, в которую все комбинированные возрасты суммируются с данной общей суммой.
- Входной комбинированный возраст (в годах) будет положительным целым числом
- Входной список дат рождения будет представлять собой список (в любом удобном для вашего языка формате) дат, который должен содержать числовое представление дня, месяца и года. Количество дней с определенной эпохи недопустимо. Вы можете предположить, что список введенных дат отсортирован в хронологическом порядке.
- На выходе будет одна дата в том же формате, что и даты ввода
- Для совокупного возраста 1 год считается ровно 365,25 днями.
- Для некоторых входных данных будет невозможно найти дату после всех дат рождения, когда все они в сумме составят общий возраст. Например, рассмотрим две даты рождения, которые разнесены на 20 лет, но мы хотим получить в совокупности 10 лет. В этом случае результатом будет 10-й день рождения с более старшей датой рождения. Другими словами, индивидуальный возраст считается равным 0 для всех дат до даты рождения этого человека.
- Выходными данными будет первая дата, в которую комбинированные возрасты составляют, по крайней мере, возраст ввода
- Вы можете использовать встроенные функции даты и времени
- Вы должны поддержать даты, начиная с 1970/01/01.
Примеры
Здесь я даю все даты в формате ГГГГ / ММ / ДД, но вы можете использовать любой формат, который вам нравится.
Input Output
10 2000/01/01 2010/01/01
100 1975/03/05,1978/07/23,2008/11/12,2012/12/20 2018/11/22
100 1975/03/06,1978/07/23,2008/11/12,2012/12/20 2018/11/23
100 1975/03/09,1978/07/23,2008/11/12,2012/12/20 2018/11/23
100 1975/03/10,1978/07/23,2008/11/12,2012/12/20 2018/11/24
3 1990/08/01,1995/07/02 1993/08/01
50 1975/03/05,1978/07/23,2008/11/12,2012/12/20 2001/11/13
Обратите внимание, что в последних двух примерах дата выхода находится в пределах диапазона дат ввода, согласно правилу 5.
Ответы:
Mathematica
138 107237 байтМои первые попытки были неаккуратными и недостойными. Это должно работать, как правило, при условии, что даты рождения указаны в порядке от самого раннего до последнего, как в тестовых случаях.
Контрольные примеры были выбраны правильно и их трудно правильно реализовать. Код оказался намного длиннее, чем я надеялся.
Общая логика заключается в
Тестовые случаи
источник
PowerShell,
145125 байтДовольно сложная задача, но однажды сравнительно понятная.
Расширено и прокомментировано:
Пример:
Входные данные должны содержать явно отформатированный массив представлений со строковой датой. Вывод в
MM/DD/YYYY
формате (по умолчанию для en-us локализации в PowerShell).Редактировать - Гольф 20 байтов, изменив, как мы повторяем через дни рождения, и используя время вместо делать / до
источник
PHP, 220 байт
Я добавил несколько строк для удобства чтения.
Ideone
Вот негольфированная версия:
источник