Дано: массив, состоящий из чисел 1 и 2.
Что нужно: Я строю сетку элементов. Бывает ситуация, когда «не ок»:
Для этого сортирую элементы массива в новый массив группами так, чтобы сумма элементов в группе была равна 4. Соответственно, порядок элементов массива должен быть максимально близким к изначальному —меняться местами должны лишь некоторые элементы.
Основную часть кода (JS) я написал, однако есть баг, с которым не могу справиться:
например, для массива [1,1,2,1,1,2,
1,2,2,2] - отрабатывает до выделенного момента, затем - бесконечный цикл.
Мой говнокод:
arr = [1,1,2,1,1,2,1,2,2,2];
var summ = 0;
var rowsCounter = 0;
var rows = []; // финальный массив
function arraySort(){
for (var i = 0; i < arr.length; i++) {
summ += arr[i];
if (summ > 4){
for (var x = i; x < arr.length; x++) {
if (summ - arr[x] == 4){
temp = arr[i];
arr[i] = arr[x];
arr[x] = temp;
summ = 4;
break;
} else {
continue;
}
}
}
if (summ == 4){
rows.push(arr.slice(0, i + 1));
arr.splice(0, i + 1);
summ = 0;
break;
}
};
}
while (arr.length > 0){
arraySort();
}
console.log(rows)
Видимо, остающихся небольших массивах, для которых нужно какое-то исключение?
Т.к. например, массив [1,2,2] просто дробится на [2] [1] [2]
Эни хэлп, гайз!