Voltar para os desafios
Médio 0 resolvidos 0% de aceitação

Folha de pagamento semanal

Some o pagamento de uma semana para funcionários assalariados, por hora e por comissão, cada um pago pela sua própria regra.

O que você vai aprender

  • Calcular o pagamento com uma regra por tipo de funcionário
  • Pagar horas extras acima de 40
  • Somar valores decimais com precisão

Problema

Ver original (inglês)

Um sistema de folha de pagamento trata cada funcionário como um Employee com um método WeeklyPay(), e cada tipo de funcionário o sobrescreve.

Cada funcionário é escrito como:

  • salaried <annual>: ganha annual / 52.
  • hourly <rate> <hours>: ganha rate × hours pelas primeiras 40 horas e 1.5 × rate por cada hora além de 40.
  • commission <base> <rate> <sales>: ganha base + rate × sales.

Implemente weekly_payroll(employees).

Input

employees: Os funcionários. Os números podem ter decimais.

Output

Retorne o pagamento semanal total. Respostas dentro de 1e-6 são aceitas.

Restrições

0 ≤ número de funcionários ≤ 10,000

Todos os números estão entre 0 e 10^7; hours ≤ 100

Exemplos

Exemplo 1
Entrada:
employees = ["salaried 52000", "hourly 20 45"]

Saída esperada:
expected = 1950.0
Entrada:
std::vector<std::string> employees = {"salaried 52000", "hourly 20 45"};

Saída esperada:
double expected = 1950.0;
Entrada:
string[] employees = new string[] {"salaried 52000", "hourly 20 45"};

Saída esperada:
double expected = 1950.0;

Explicação

O funcionário assalariado ganha 52000 / 52 = 1000. O funcionário por hora ganha 20 × 40 + 30 × 5 = 950. Total 1950.

Exemplo 2
Entrada:
employees = ["commission 300 0.1 2500"]

Saída esperada:
expected = 550.0
Entrada:
std::vector<std::string> employees = {"commission 300 0.1 2500"};

Saída esperada:
double expected = 550.0;
Entrada:
string[] employees = new string[] {"commission 300 0.1 2500"};

Saída esperada:
double expected = 550.0;

Explicação

300 + 0.1 × 2500 = 550.

Como abordar

Tente sozinho primeiro e depois abra uma dica de cada vez.

Dica 1

Trate cada tipo de funcionário com sua própria fórmula.

Dica 2

O pagamento por hora é normal nas primeiras 40 horas e 1,5 vez a taxa depois disso.

Dica 3

Mantenha os decimais: salário anual dividido por 52 raramente dá exato.

Complexidade esperada

tempo O(número de funcionários), espaço extra O(1)

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.