Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Требуется code review (https://javascript.ru/forum/project/69641-trebuetsya-code-review.html)

DynkanMaclaud 08.07.2017 11:51

Требуется code review
 
Задача: Массив [2, 5, 9, 11, 1, 2, 4]
X = 12
Найти подмассив, сумма элементов которого больше X, а количество элементов минимально возможное

Решение:
const find = (target, data, resultMas = [], sum = 0) => {
 	// случай если сумма чисел меньше target
	if (!data.length) {
    	    console.error('max value:!', sum);
            return
        }
	const maxNum = Math.max.apply(Math, data);
        const index = data.indexOf(maxNum);
    
        resultMas.push(maxNum);
        sum = resultMas.reduce((prev, next) => prev + next);
    
        const test = sum > target;
        if (test) {
    	    return resultMas
        } else {
            data.splice(index, 1);
            return find(target, data, resultMas, sum);
        }
};

пример
Решение громоздкое, если есть варианты отпишите

Rise 08.07.2017 12:11

DynkanMaclaud, Math.max.apply(Math, data) => Math.max(...data) :)

рони 08.07.2017 12:26

DynkanMaclaud,
<script>
function fn(a, b) {
    a = a.slice(0).sort(function(a, b) {
        return b - a
    }).filter(function(a) {
        var c = 0 < b;
        b -= a;
        return 0 < c
    });
    return 0 < b ? !1 : a
};
document.write(JSON.stringify(fn([2, 5, 9, 11, 1, 2, 4],12)));

</script>

j0hnik 08.07.2017 17:31

var arr = [2, 5, 9, 11, 1, 2, 4], x = 12;
arr.sort((a, b)=> b-a).reduce((sum, el, i) => { 
	if (sum > x) arr.length = i;
	if (sum < x && i==arr.length-1) arr = false; // если все же X больше
	return sum + el;
});
alert(arr);

рони 08.07.2017 17:48

Цитата:

Сообщение от j0hnik
reverse()

:blink:

j0hnik 08.07.2017 17:54

рони, опишите подробней ваши сомнения

рони 08.07.2017 18:00

j0hnik,
зачем лишнее reverse? может подумать и сделать без него?

j0hnik 08.07.2017 18:31

Цитата:

Сообщение от j0hnik (Сообщение 457973)
var arr = [2, 5, 9, 11, 1, 2, 4], x = 12;
arr.sort((a, b)=> b-a).reduce((sum, el, i) => { 
	if (sum > x) arr.length = i;
	if (sum < x && i==arr.length-1) arr = false; // если все же X больше
	return sum + el;
});
alert(arr);

Рони спасибо, поправил

рони 08.07.2017 18:32

j0hnik,
:dance:

рони 09.07.2017 09:51

минимальный подмассив с максимальной суммой больше определённого числа
 
:write:
<script>
function fn(a, c) {
    a = a.slice(0).sort(function(a, b) {
        return b - a
    });
    for (var b = 0; b < a.length; b++) {
        if (c < a[b]) return a.slice(0, ++b);
        c -= a[b]
    }
    return !1
};
document.write(JSON.stringify(fn([2, 5, 9, 11, 1, 2, 4],12)));

</script>


Часовой пояс GMT +3, время: 05:47.