Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.01.2022, 17:10
Интересующийся
Отправить личное сообщение для DzonyB Посмотреть профиль Найти все сообщения от DzonyB
 
Регистрация: 28.01.2022
Сообщений: 16

Разбить массив на подмассивы
Добрый день , прошу помощи . Как составить цикл, чтобы разбить массив на подмассивы .
Дано arr= [1,2,4,7,1,6,2,8]
Нужно получить arr_new=[[8,2],[6,4],[1,2,7,1]]
T.e разбить массив , на подмассивы , чтобы сумма в подмассивах как можно ближе была равна 10 .
Если нужны мои потуги кода , я могу выложить , но пока своим умом дойти не могу.
Заранее, спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 28.01.2022, 17:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

DzonyB,
для медитации ... решения не 100%
https://javascript.ru/forum/misc/797...e-massiva.html

надо искать тем с десяток наберётся.
Ответить с цитированием
  #3 (permalink)  
Старый 28.01.2022, 23:45
Интересующийся
Отправить личное сообщение для DzonyB Посмотреть профиль Найти все сообщения от DzonyB
 
Регистрация: 28.01.2022
Сообщений: 16

Сообщение от рони Посмотреть сообщение
DzonyB,
для медитации ... решения не 100%
https://javascript.ru/forum/misc/797...e-massiva.html

надо искать тем с десяток наберётся.
Спасибо за ссылку , буду искать.
Ответить с цитированием
  #4 (permalink)  
Старый 29.01.2022, 00:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от DzonyB
Если нужны мои потуги
аналогично что - то из разряда ... слеплено из ... )))

<script>
        function permute(arr) {
            let l = arr.length,
                used = Array(l),
                data = Array(l);
            return function* backtracking(pos) {
                if (pos == l) yield data.slice();
                else
                    for (let i = 0; i < l; ++i)
                        if (!used[i]) {
                            used[i] = true;
                            data[pos] = arr[i];
                            yield* backtracking(pos + 1);
                            used[i] = false;
                        }
            }(0);
        }
        function sumArray(arr) {
            return arr.reduce((a, b) => a + b, 0)
        }
        function permutDevide(arr, n) {
            arr.sort((a, b) => a - b);
            const gen = permute(arr);
            let current = gen.next();
            let max = [],
                k = 0,
                sum = sumArray(arr);
            while (!current.done) {
                let temp = [],
                    num = 0,
                    d = 0,
                    s = sum;
                const res = [temp];
                for (const elem of current.value) {
                if(num + elem > n && s != elem || (elem > n)) {
                if(num == n) d++;
                temp = [elem];
                res.push(temp);
                num = elem;
                }
                else {
                 temp.push(elem);
                 num += elem;
                }

                s -= elem;
                }
                if(num == n) d++;
                if (!temp.length) res.pop();
                if (d >= sum / n - 1.5) return res;
                if (!max.length) max = res;
                if (d > k) {
                    max = res;
                    k = d
                };
                current = gen.next();
            }
            return max
        }
        const test = [
            [1, 2, 4, 7, 1, 6, 2, 8], [5, 2, 5, 1, 5, 4, 6, 3], [100, 8, 7, 3, 1, 45, 20, 6, 4], [2, 2, 3, 9, 5, 6, 1], [3, 3, 3, 3, 3, 3], [3, 7, 3, 3, 3, 3]
        ];
        for (const arr of test) document.write(`${JSON.stringify(arr)} => ${JSON.stringify(permutDevide(arr, 10))}<br>`)
    </script>
Ответить с цитированием
  #5 (permalink)  
Старый 29.01.2022, 01:16
Интересующийся
Отправить личное сообщение для DzonyB Посмотреть профиль Найти все сообщения от DzonyB
 
Регистрация: 28.01.2022
Сообщений: 16

Еще раз спасибо , когда копирую Ваш код к себе в браузер , выдает кучу ошибок . Буду пробовать сам .
Ответить с цитированием
  #6 (permalink)  
Старый 29.01.2022, 15:09
Интересующийся
Отправить личное сообщение для DzonyB Посмотреть профиль Найти все сообщения от DzonyB
 
Регистрация: 28.01.2022
Сообщений: 16

Ничего не получается , мож поможете составить цикл , только по одному моему массиву , а не по группе , как в предложенном ранее варианте.
Заранее спасибо.

P.S хоть и не получается , но плюсы небольшие есть. Перелопатил всю книгу. ))
Ответить с цитированием
  #7 (permalink)  
Старый 29.01.2022, 15:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от DzonyB
мож поможете составить цикл , только по одному моему массиву ,

permutDevide([1,2,4,7,1,6,2,8], 10);
Ответить с цитированием
  #8 (permalink)  
Старый 29.01.2022, 15:35
Интересующийся
Отправить личное сообщение для DzonyB Посмотреть профиль Найти все сообщения от DzonyB
 
Регистрация: 28.01.2022
Сообщений: 16

Сообщение от рони Посмотреть сообщение

permutDevide([1,2,4,7,1,6,2,8], 10);
Или я дурак , или лыжи не едут .
Мне не нужна Ваша функция
function permut(arr){
}

Я вчера писал , что при копировании этой функции в PHP Storm и браузере ругается на строку
if (pos == l) yield data.slice();
. а без этой функции вторая не работает . Пробовал переделать но пока не получилось . Пробую сам , тоже пока результат 0 .
И я не очень понял эту часть кода
while (!current.done)

Поэтому и попросил помощи . Вы в своем коде разберетесь быстрее чем , но если нет , так нет . Все равно спасибо.
Ответить с цитированием
  #9 (permalink)  
Старый 29.01.2022, 15:40
Интересующийся
Отправить личное сообщение для DzonyB Посмотреть профиль Найти все сообщения от DzonyB
 
Регистрация: 28.01.2022
Сообщений: 16

P.S Я работаю в HTML и использую Vue . Может в этом проблема ?
Ответить с цитированием
  #10 (permalink)  
Старый 29.01.2022, 16:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

DzonyB,
не понимаю.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать массив объектов в массив массивов sovsem-nub Events/DOM/Window 4 12.05.2018 21:56
Добавление объекта в массив в цикле Dark19 Элементы интерфейса 3 11.12.2016 23:11
Чтение данных из файла в массив TheSingleElk Общие вопросы Javascript 2 16.06.2016 01:09
Разбить строку в массив по несколько символов BaBaKa Общие вопросы Javascript 11 20.11.2014 21:29
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14