Skip to content

Commit

Permalink
feat: Add solution challenge 17
Browse files Browse the repository at this point in the history
  • Loading branch information
neftdev committed Dec 17, 2021
1 parent c008ee7 commit 8c07d04
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 0 deletions.
40 changes: 40 additions & 0 deletions challenge-17/README.md
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.
19 changes: 19 additions & 0 deletions challenge-17/solution.js
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;
}

0 comments on commit 8c07d04

Please sign in to comment.