Sobes.tech
Junior — Middle+
49

Аудит кода расчёта средних параметров зарплаты

被问到的公司:

Ubic
任务条件

Провести ревью кода проекта, который:

  • принимает payload с информацией о сотрудниках (возраст, зарплата);
  • рассчитывает:
    • средний возраст персонала;
    • среднюю величину зарплаты;
    • среднее увеличение зарплаты по сравнению с заданными базовыми значениями;
    • сотрудника с наибольшей зарплатой;
    • сотрудника с наименьшей зарплатой;
  • проверяет корректность работы через assert.
import json
import math

payload = [
    {"id": 1, "name": "Laith", "surname": "Simmons", "age": 68, "salary": "£27888"},
    {"id": 2, "name": "Mikayla", "surname": "Henry", "age": 49, "salary": "¥67137"},
    {"id": 3, "name": "Garth", "surname": "Fields", "age": 70, "salary": "¥70472"}
]

class Data:
    def do(self, data, iage, isalary):
        average_age_increase = math.floor(
            sum(e['age'] for e in data) / len(data)
        ) - iage
        average_salary_increase = math.floor(
            sum(int(e['salary'][1:]) for e in data) / len(data)
        ) - isalary
        yearly_avg_increase = math.floor(
            average_salary_increase / average_age_increase
        )
        salaries = [int(e['salary'][1:]) for e in data]
        threshold_max = str(max(salaries))
        max_salary_person = [e for e in data if e['salary'][1:] == threshold_max]
        threshold_min = str(min(salaries))
        min_salary = [e for e in data if e['salary'][1:] == threshold_min]
        
        return json.dumps({
            'avg_age': math.floor(sum(e['age'] for e in data) / len(data)),
            'avgSalary': math.floor(
                sum(int(e['salary'][1:]) for e in data) / len(data)
            ),
            'avg_yearly_increase': yearly_avg_increase,
            'max_salary': max_salary_person,
            'min_salary': min_salary,
        })

ds = Data()
calculation_result = ds.do(payload, 20, 20000)
test_result = json.dumps({
    'avg_age': 62,
    'avgSalary': 55165,
    'avg_yearly_increase': 837,
    'max_salary': [{
        'id': 3,
        'name': 'Garth',
        'surname': 'Fields',
        'age': 70,
        'salary': '¥70472'
    }],
    'min_salary': [{
        'id': 1,
        'name': 'Laith',
        'surname': 'Simmons',
        'age': 68,
        'salary': '£27888'
    }]
})
assert calculation_result == test_result  # True