Calcular los importes adeudados
Calcula los importes adeudados por cada cliente de una tienda de alquiler de dispositivos.
Datos de ejemplo
{
// [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],
]
}Costo del dispositivo por hora
Cada dispositivo tiene un nivel y cada nivel tiene un costo por hora. Estos valores se almacenan en devices y deviceLevels (por ejemplo, el dispositivo 1 tiene un nivel de 1, por lo que su costo es de 1.50/hora).
Costo del dispositivo por hora por cliente
Varios clientes pueden compartir un alquiler de un solo dispositivo. Todos los costos se repartirán por igual (por ejemplo, si 2 clientes comparten un alquiler de 10 horas de un dispositivo que cuesta $1/hora, a cada uno le corresponderán $5).
Descuentos del cliente
Cada cliente tendrá un descuento porcentual y un descuento de tarifa fija. Para calcular el importe adeudado después del descuento, resta el descuento porcentual del cliente de su importe total adeudado y luego resta la tarifa fija. Si el importe después del descuento es menor que minimumCharge, minimumCharge se tomará como el importe adeudado.
Entradas
data: Consulta los ejemplos.minimumCharge: Importe mínimo (consulta "descuentos del cliente" arriba).
Valor de retorno
La función devolverá un objeto indexado por nombre del cliente e incluirá el importe total adeudado por cada cliente, redondeado a dos decimales.
Ejemplos
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 }Desglose del ejemplo
John alquiló el dispositivo 1 durante 10 horas según los datos de rentals.
El dispositivo 1 está en el nivel de precio 1 y cuesta $1.50/h según los datos de deviceLevels, por lo que el cargo de este dispositivo es 1.50 * 10 o $15.
Sara alquiló el dispositivo 0 durante 20 horas según los datos de rentals.
El dispositivo 0 está en el nivel de precio 0 y cuesta $1.00/h según los datos de deviceLevels, por lo que el cargo de este dispositivo es 1.00 * 20 o $20.
John y Sara compartieron un alquiler del dispositivo 1 durante 20 horas según los datos de rentals. El dispositivo 1 está en el nivel de precio 1 y cuesta $1.50/h según los datos de deviceLevels, por lo que el cargo de este dispositivo es 1.50 * 20 o $30. John y Sara dividirán ese cargo, así que cada uno deberá $15.
John debe 15 + 15 o $30. Según la tabla de customers, John recibe un descuento del 10% y otro descuento de tarifa fija de $5. John debe 30 - (30 * 0.10) - 5 o $22.
Sara debe 20 + 15 o $35. Según los datos de customers, Sara recibe un descuento del 5% y otro descuento de tarifa fija de $7. Sara debe 35 - (35 * 0.05) - 7 o 26.25.
Notas
- Puede haber cualquier cantidad de dispositivos, niveles de dispositivos, clientes y alquileres.
- La legibilidad del código es importante; no se probará directamente, pero elige la legibilidad en lugar de lograr el objetivo con la menor cantidad de código posible.