Repartir regalos
Santa quiere repartir regalos de la forma más eficiente posible 🎁. Tiene una lista de regalos, cada uno con un peso, y un trineo que solo puede cargar hasta un peso máximo.
Los regalos se entregan en orden, y Santa no puede cambiar ese orden. Cuando un regalo no cabe en el trineo actual, Santa envía el trineo y prepara uno nuevo.
Tu tarea es escribir una función que calcule el número mínimo de trineos necesarios para entregar todos los regalos.
Eso sí, ten en cuenta que a veces hay un regalo que no cabe en el trineo, entonces hay que devolver null porque ese trineo no sirve para ese pack de regalos.
packGifts([2, 3, 4, 1], 5)
// 2 trineos
// Trineo 1: 2 + 3 = 5
// Trineo 2: 4 + 1 = 5
packGifts([3, 3, 2, 1], 3)
// 3 trineos
// Trineo 1: 3
// Trineo 2: 3
// Trineo 3: 2 + 1 = 3
packGifts([1, 1, 1, 1], 2)
// 2 trineos
// Trineo 1: 1 + 1 = 2
// Trineo 2: 1 + 1 = 2
packGifts([5, 6, 1], 5)
// null
// Hay un regalo de peso 6 que no cabe
packGifts([], 10)
// 0 trineos
// No hay regalos que entregar
Solution
function packGifts(gifts: Gifts, maxWeight: MaxWeight): Result {
if (gifts.length === 0) return 0;
let sleighCount = 0;
let currentSleighWeight = 0;
for (const gift of gifts) {
if (gift > maxWeight) return null;
if (currentSleighWeight + gift > maxWeight) {
sleighCount++;
currentSleighWeight = gift;
} else {
currentSleighWeight += gift;
}
}
if (currentSleighWeight > 0) {
sleighCount++;
}
return sleighCount;
}