Помогите решить задачу на комбинатотрику
Дилан и Кейт хотят путешествовать между несколькими городами А, В, С .... Кейт имеет на листе бумаги список расстояний между этими городами. ls = [51, 56, 58, 59, 61]. Дилан устал ездить, и он говорит Кейт, что не хочет ехать больше t = 174 миль, и он посетит только 3 города. Расстояния, а значит, какие города они выберут, чтобы сумма расстояний была как можно больше, чтобы угодить Кейт и Дилану?
Пример:
Имея список ls и 3 города для посещения, они могут сделать выбор между: [51,56,58], [51,56,59], [51,56,61], [51,58,59], [51, 58,61], [51,59,61], [56,58,59], [56,58,61], [56,59,61], [58,59,61].
Тогда суммы расстояний составляют 165, 166, 168, 168, 170, 171, 173, 175, 176, 178.
Наибольшей возможной суммой с учетом ограничения в 174 есть 173, а расстояния до 3 соответствующих городов - [56, 58, 59].
Функция chooseDistance принимает параметры:
t (максимальная сумма расстояний, целое число> = 0),
k (количество городов, которые нужно посетить, k> = 1),
ls (список расстояний, все расстояния является положительными или нулевыми целыми числами, и этот список содержит по крайней мере один элемент).
Функция возвращает "лучшую" сумму, то есть наибольшую возможную сумму k расстояний, меньших или равных заданной границы t, если эта сумма существует, или если не существует - null.
Примечание: не изменяйте переменную ls.
Исходный код
const chooseDistance = (t, k, ls) => {
// твой код
return null;
}
chooseDistance (174, 3, [51, 56, 58, 59, 61]) // 173
chooseDistance (163, 3, [50]); // null
chooseDistance(331, 4, [50, 55, 56, 57, 58])// 331
От мой код, но тут я только сделал что б по три елемента в подмасиве, как сделать универсально?
const chooseDistance = (t, k, ls) => {
let results = []
for (let i = 0; i < ls.length - 1; i++) {
for (let j = i + 1; j < ls.length; j++) {
for (let k = j + 1; k < ls.length; k++) {
results.push([ls[i], ls[j], ls[k]]);
}
}
}
results = results.map(item => {
return item.reduce((p, n) => p + n)`
}).filter(item => item <= t)
}
console.log(chooseDistance(174, 3, [51, 56, 58, 59, 61]))
console.log(chooseDistance(163, 3, [51]))
console.log(chooseDistance(331, 4, [50, 55, 56, 57, 58]))