Решение задачи Расчет отпускных с Яндекс Контест
Без пояснения   Просмотров: 3057
Вас попросили разработать класс, с помощью которого вычисляется размер (в рублях) оплачиваемого отпуска сотрудника за определенный период.
Нужно написать класс Vacations, со следующим функционалом:
1) метод update_salary(date, salary) - обновить зарплату, начиная с некоторой даты date. Считается, что зарплата сотрудника равна salary до тех пор, пока не существует даты date_new > date, для которой был вызван метод update_salary. Зарплата указана за один рабочий день!
Пример:
my_vacations = Vacations()
my_vacations.update_salary('01-01-2021', 100)
my_vacations.update_salary('01-06-2021', 500)
my_vacations.update_salary('01-01-2020', 5000)
Тогда зарплата сотрудника в период с 01-01-2020 по 31-12-2020 (включительно) была равна 5000, в период с 01-01-2021 по 31-05-2021 была равна 100, в период с 01-06-2021 по настоящее время зарплата сотрудника равна 500. Допускается обновление информации с более ранними датами как в примере. Также нормально, что размер заработной платы может стать меньше (кризис). Считается, что дата выхода сотрудника на работу - это минимальная дата для которой есть информация о выплатах.
2) вызов экземпляра класса должен принимать на вход две даты: дата начала отпуска и дата окончания отпуска (включительно) и возвращать размер отпускной выплаты. Отпускная выплата - это средняя зарплата в день за расчетный период (как он определяется см. ниже), умноженная на количество дней в отпуске. Считается, что сотрудник все еще работает в компании в момент, когда запрашивается информация об отпускных выплатах.
Пример:
my_vacations = Vacations()
my_vacations.update_salary('01-01-2021', 10000)
vacation_salary = my_vacations('01-01-2021', '01-02-2021')
Количество отпускных дней не ограничено. В расчет берутся данные за последние 365 дней, не включая первый день отпуска (то есть если дата начала отпуска 01-01-2021, то нужно брать данные с 01-01-2020 по 31-12-2020), при этом если сотрудник работает меньше года, берется весь период его работы. Если дата выхода сотрудника на работу больше или равна дате начала отпуска (то есть ВСЕ даты, переданные вызовам метода .update_salary к моменту вызова экземпляра класса, больше или равны дате начала отпуска), среднюю зарплату в день за расчетный период считайте равной 0 (в примере выше vacation_salary равна 0).
Теперь, мы поняли, что средняя зарплата в день за расчетный период = (общее количество заработанных денег за расчётный период) / (количество дней (считаем их все рабочими) в расчетном периоде).
Общее количество заработанных денег за расчетный период - это сумма денег, которую заработал сотрудник за последние min(365, все отработанные дни), СЧИТАЯ, ЧТО КАЖДЫЙ ДЕНЬ БЫЛ РАБОЧИМ и за него была выплачена дневная зарплата.
Нужно написать класс Vacations, со следующим функционалом:
1) метод update_salary(date, salary) - обновить зарплату, начиная с некоторой даты date. Считается, что зарплата сотрудника равна salary до тех пор, пока не существует даты date_new > date, для которой был вызван метод update_salary. Зарплата указана за один рабочий день!
Пример:
my_vacations = Vacations()
my_vacations.update_salary('01-01-2021', 100)
my_vacations.update_salary('01-06-2021', 500)
my_vacations.update_salary('01-01-2020', 5000)
Тогда зарплата сотрудника в период с 01-01-2020 по 31-12-2020 (включительно) была равна 5000, в период с 01-01-2021 по 31-05-2021 была равна 100, в период с 01-06-2021 по настоящее время зарплата сотрудника равна 500. Допускается обновление информации с более ранними датами как в примере. Также нормально, что размер заработной платы может стать меньше (кризис). Считается, что дата выхода сотрудника на работу - это минимальная дата для которой есть информация о выплатах.
2) вызов экземпляра класса должен принимать на вход две даты: дата начала отпуска и дата окончания отпуска (включительно) и возвращать размер отпускной выплаты. Отпускная выплата - это средняя зарплата в день за расчетный период (как он определяется см. ниже), умноженная на количество дней в отпуске. Считается, что сотрудник все еще работает в компании в момент, когда запрашивается информация об отпускных выплатах.
Пример:
my_vacations = Vacations()
my_vacations.update_salary('01-01-2021', 10000)
vacation_salary = my_vacations('01-01-2021', '01-02-2021')
Количество отпускных дней не ограничено. В расчет берутся данные за последние 365 дней, не включая первый день отпуска (то есть если дата начала отпуска 01-01-2021, то нужно брать данные с 01-01-2020 по 31-12-2020), при этом если сотрудник работает меньше года, берется весь период его работы. Если дата выхода сотрудника на работу больше или равна дате начала отпуска (то есть ВСЕ даты, переданные вызовам метода .update_salary к моменту вызова экземпляра класса, больше или равны дате начала отпуска), среднюю зарплату в день за расчетный период считайте равной 0 (в примере выше vacation_salary равна 0).
Теперь, мы поняли, что средняя зарплата в день за расчетный период = (общее количество заработанных денег за расчётный период) / (количество дней (считаем их все рабочими) в расчетном периоде).
Общее количество заработанных денег за расчетный период - это сумма денег, которую заработал сотрудник за последние min(365, все отработанные дни), СЧИТАЯ, ЧТО КАЖДЫЙ ДЕНЬ БЫЛ РАБОЧИМ и за него была выплачена дневная зарплата.
Заявка на расчет
Автор: Администратор