Calcular os valores devidos
Calcule os valores devidos por cada cliente de uma loja de aluguel de dispositivos.
Dados de exemplo
{
// [id, rate( $/hour )]
deviceLevels: [
[0, 1.00],
[1, 1.50]
],
// [id, level]
devices: [
[0, 0],
[1, 1]
],
// [id, name, percentage discount (%), flat rate discount($)]
customers: [
[0, 'John', 10, 5],
[1, 'Sara', 5, 7]
],
// [id, device, customers, hours]
rentals: [
[0, 1, [0], 10],
[1, 0, [1], 20],
[2, 1, [1,0], 20],
]
}Custo do dispositivo por hora
Cada dispositivo tem um nível, e cada nível tem um custo por hora. Esses valores são armazenados em devices e deviceLevels (por exemplo, o dispositivo 1 tem nível 1, então seu custo é de 1.50/hora).
Custo do dispositivo por hora por cliente
Vários clientes podem compartilhar o aluguel de um único dispositivo. Todos os custos serão divididos igualmente (por exemplo, se 2 clientes compartilharem um aluguel de 10 horas de um dispositivo que custa $1/hora, cada um deverá $5).
Descontos do cliente
Cada cliente terá um desconto percentual e um desconto de tarifa fixa. Para calcular o valor devido após o desconto, subtraia o desconto percentual do cliente do valor total devido e depois subtraia a tarifa fixa. Se o valor após o desconto for menor que minimumCharge, minimumCharge será considerado o valor devido.
Entradas
data: Consulte os exemplos.minimumCharge: Valor mínimo da cobrança (consulte "descontos do cliente" acima).
Valor de retorno
A função retornará um objeto indexado pelo nome do cliente e incluirá o valor total devido por cada cliente, arredondado para duas casas decimais.
Exemplos
const minimumCharge = 10
const data = {
// [id, rate( per/hour )]
deviceLevels: [
[0, 1.00],
[1, 1.50]
],
// [id, level]
devices: [
[0, 0],
[1, 1]
],
// [id, name, percentage discount (%), flat rate discount($)]
customers: [
[0, 'John', 10, 5],
[1, 'Sara', 5, 7]
],
// [id, device, customers, hours]
rentals: [
[0, 1, [0], 10],
[1, 0, [1], 20],
[2, 1, [1,0], 20],
]
}
data, minimumCharge ➞ { John: 22, Sara: 26.25 }Detalhamento do exemplo
John alugou o dispositivo 1 por 10 horas, de acordo com os dados de rentals.
O dispositivo 1 está no nível de preço 1 e custa $1.50/h, de acordo com os dados de deviceLevels, então a cobrança por esse dispositivo é 1.50 * 10 ou $15.
Sara alugou o dispositivo 0 por 20 horas, de acordo com os dados de rentals.
O dispositivo 0 está no nível de preço 0 e custa $1.00/h, de acordo com os dados de deviceLevels, então a cobrança por esse dispositivo é 1.00 * 20 ou $20.
John e Sara compartilharam o aluguel do dispositivo 1 por 20 horas, de acordo com os dados de rentals. O dispositivo 1 está no nível de preço 1 e custa $1.50/h, de acordo com os dados de deviceLevels, então a cobrança por esse dispositivo é 1.50 * 20 ou $30. John e Sara dividirão essa cobrança, então cada um deverá $15.
John deve 15 + 15 ou $30. De acordo com a tabela de customers, John recebe um desconto de 10% e um desconto adicional de tarifa fixa de $5. John deve 30 - (30 * 0.10) - 5 ou $22.
Sara deve 20 + 15 ou $35. De acordo com os dados de customers, Sara recebe um desconto de 5% e um desconto adicional de tarifa fixa de $7. Sara deve 35 - (35 * 0.05) - 7 ou 26.25.
Observações
- Pode haver qualquer quantidade de dispositivos, níveis de dispositivos, clientes e aluguéis.
- A legibilidade do código é importante; ela não será testada diretamente, mas escolha a legibilidade em vez de atingir o objetivo com a menor quantidade possível de código.