Skip to content

Commit

Permalink
Challenge five completed
Browse files Browse the repository at this point in the history
  • Loading branch information
rau2191 committed Dec 6, 2022
1 parent 432ad2e commit 5090dfe
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
42 changes: 42 additions & 0 deletions 05- Optimizando los viajes de Papá Noel/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
Para no cansar a los renos, Papá Noel quiere dejar el máximo número de regalos haciendo el menor número posible de viajes.

Tiene un array de ciudades donde cada elemento es el número de regalos que puede dejar allí. ``[12, 3, 11, 5, 7]``. Por otro lado, el límite de regalos que caben en su saco. Y, finalmente, el número de ciudades máximo que sus renos pueden visitar.

Como no quiere dejar una ciudad a medias, **si no puede dejar todos los regalos que son de esa ciudad, no deja ninguno allí**.

Crea un programa que le diga **la suma más alta de regalos** que podría repartir teniendo en cuenta el máximo de regalos que puede transportar y el número máximo de ciudades que puede visitar:


```javascript
const giftsCities = [12, 3, 11, 5, 7]
const maxGifts = 20
const maxCities = 3

// la suma más alta de regalos a repartir
// visitando un máximo de 3 ciudades
// es de 20: [12, 3, 5]

// la suma más alta sería [12, 7, 11]
// pero excede el límite de 20 regalos y tendría
// que dejar alguna ciudad a medias.

getMaxGifts(giftsCities, maxGifts, maxCities) // 20
```

Si no se puede realizar ningún viaje que satisface los requerimientos, el resultado debe ser ``0``. Más ejemplos:
```javascript
getMaxGifts([12, 3, 11, 5, 7], 20, 3) // 20
getMaxGifts([50], 15, 1) // 0
getMaxGifts([50], 100, 1) // 50
getMaxGifts([50, 70], 100, 1) // 70
getMaxGifts([50, 70, 30], 100, 2) // 100
getMaxGifts([50, 70, 30], 100, 3) // 100
getMaxGifts([50, 70, 30], 100, 4) // 100
```

A tener en cuenta:

* maxGifts >= 1
* giftsCities.length >= 1
* maxCities >= 1
* El número de maxCities puede ser mayor a giftsCities.length
45 changes: 45 additions & 0 deletions 05- Optimizando los viajes de Papá Noel/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
function getMaxGifts(giftsCities, maxGifts, maxCities) {
/*
* Calculate all combinations
* Filter all combinations less than or equal to maxCities
* Obtain all combinations sum
* Filter sums less than or equal to maxGifts
* Sort sums array descending
* Get first value or 0
*/

const getAllCombinations = () => {
let combinations = [];
for (let i = 1; i < (1 << giftsCities.length); i++) {
let innerCombinations = [];

giftsCities.forEach((_, j) => {
if ((i & (1 << j))) {
innerCombinations.push(giftsCities[j]);
}
});
combinations.push(innerCombinations)
}

return combinations;
}

const result = getAllCombinations()
.filter(({ length }) => length <= maxCities)
.map(arr => arr.reduce((acc, element) => acc + element))
.filter(x => x <= maxGifts)
.sort((a, b) => b - a);


return result.length ? result[0] : 0;
}



console.log('Expected:', 20, 'Actual:', getMaxGifts([12, 3, 11, 5, 7], 20, 3));
console.log('Expected:', 0, 'Actual:', getMaxGifts([50], 15, 1));
console.log('Expected:', 50, 'Actual:', getMaxGifts([50], 100, 1));
console.log('Expected:', 70, 'Actual:', getMaxGifts([50, 70], 100, 1));
console.log('Expected:', 100, 'Actual:', getMaxGifts([50, 70, 30], 100, 2));
console.log('Expected:', 100, 'Actual:', getMaxGifts([50, 70, 30], 100, 3));
console.log('Expected:', 100, 'Actual:', getMaxGifts([50, 70, 30], 100, 4));

0 comments on commit 5090dfe

Please sign in to comment.