-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
59 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# Descripción | ||
|
||
Las empresas de paquetería 📦 se preparan para la época de fiestas y la locura de envíos que les espera. | ||
|
||
La empresa funciona con flotas de furgonetas 🚛 y camiones 🚚. Las flotas tienen un organigrama, ya que existen rangos de nivel de experiencia. | ||
|
||
Necesitamos saber el número de paquetes que una persona va a poder gestionar en un día. Para ello se cuenta el número de paquetes que puede llevar esa persona y todos los transportistas que tiene en su equipo. Lo malo es que los datos están almacenados de una forma un poco rara en un array: | ||
|
||
El array contiene otros arrays que contienen los datos de cada transportista | ||
transportista[0] -> Nombre/ID del Transportista | ||
transportista[1] -> Paquetes que gestiona en un día | ||
transportista[2] -> Array con sus subordinados | ||
|
||
Para que lo veamos en código, tanto el array, como la función de dos parámetros para conseguir el número deseado: | ||
|
||
```js | ||
const carriers = [ | ||
['dapelu', 5, ['midu', 'jelowing']], | ||
['midu', 2, []], | ||
['jelowing', 2, []], | ||
]; | ||
|
||
countPackages(carriers, 'dapelu'); // 9 | ||
// 5 de dapelu, 2 de midu y 2 de jelowing = 9 | ||
|
||
const carriers2 = [ | ||
['lolivier', 8, ['camila', 'jesuspoleo']], | ||
['camila', 5, ['sergiomartinez', 'conchaasensio']], | ||
['jesuspoleo', 4, []], | ||
['sergiomartinez', 4, []], | ||
['conchaasensio', 3, ['facundocapua', 'faviola']], | ||
['facundocapua', 2, []], | ||
['faviola', 1, []], | ||
]; | ||
|
||
countPackages(2, 'camila'); // 15 | ||
// 5 de camila, 4 de sergiomartinez, 3 de conchaasensio, 2 de facundocapua y 1 de faviola = 15 | ||
``` | ||
|
||
¡Ten cuidado! Como has visto en el segundo ejemplo, el organigrama puede tener diferentes niveles y además nos viene información que puede ser que no necesitemos. Debemos tener en cuenta el parámetro de carrierID para calcular bien el número y contar todo su equipo. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
const indexCarriers = (carriers) => { | ||
const obj = {}; | ||
carriers.forEach(([carrierID, packagesPerDay, subordinates]) => { | ||
obj[carrierID] = { packagesPerDay, subordinates }; | ||
}); | ||
return obj; | ||
}; | ||
|
||
export default function countPackages(carriers, carrierID) { | ||
const indexedCarriers = indexCarriers(carriers); | ||
let accumulator = 0; | ||
let carrierIds = [carrierID]; | ||
while (carrierIds.length) { | ||
const { packagesPerDay, subordinates } = indexedCarriers[carrierIds.pop()]; | ||
accumulator += packagesPerDay; | ||
carrierIds = carrierIds.concat(subordinates); | ||
} | ||
return accumulator; | ||
} |