Нужен алгоритм распределения произвольного количества элементов по массивам.

Например, есть 3 элемента: 0, 1, 2.
Нужно найти все варианты распределения по массивам

Варианты могут быть следующие:

Вариант 1:
Массив 1(0 ,1, 2)

Вариант 2:
Массив 1(0, 1)
Массив 2(2)

Вариант 3:
Массив 1(0, 2)
Массив 2(1)

Вариант 4:
Массив 1(1, 2)
Массив 2(0)

Вариант 5:
Массив 1(0)
Массив 2(1)
Массив 3(2).

Количество элементов может быть любым. Необходимо найти все варианты, но порядок как внутри массива, так и порядок массивов не важен. То есть вариант, в котором есть Массив 1(0) и Массив 2(2, 1), будет являться дублем варианта 4.

На выходе ожидается:

один МассивРезультат, каждый элемент которого это МассивВариант, каждый элемент которого это МассивВарианта (или список значений, не так важно), каждый элемент которого это Элемент.
---
Всем спасибо, решение найдено. Получился универсальный алгоритм с нефиксированным количеством элементов. Безусловно, чем больше элементов, тем значительно дольше идет процесс. Но он идет, и на выходе получается нужный массив вариантов. Внутри алгоритма использовалась функция https://infostart.ru/1c/articles/365025/ как вспомогательная.
---
так это задача не для программирования, а обычная комбинаторика.

Необходимо найти все варианты логичнее должно звучать "найти количество" всех возможных вариантов.
---
мне на выходе не нужно количество, мне нужен массив с массивами
---
и что в этих масивах должно быть? ещё массивы?
---
По примеру на выходе вижу примерно так:

МассивРезультат:

     МассивРезультат[0] - Вариант 1

          МассивРезультат[0][0] - Массив 1
               МассивРезультат[0][0][0] - 0
               МассивРезультат[0][0][1] - 1
               МассивРезультат[0][0][2] - 2

     МассивРезультат[1] - Вариант 2

          МассивРезультат[1][0] - Массив 1
               МассивРезультат[1][0][0] - 0
               МассивРезультат[1][0][1] - 1
          МассивРезультат[1][1] - Массив 2
               МассивРезультат[1][1][0] - 2
  и т.д.

Причем вместо массива элементов, например, "МассивРезультат[0][0] - Массив 1", может быть список значений, это не так важно
---
чем вариант https://forum.infostart.ru/forum9/topic260345/
не подошел. вы написали точто нужно
---
там стояла другая задача
---
а теперь пусть элементов будет 25.
черт с ним быстродейтвием на несколькот часов , а озу сколько потребуется ?
лучше опишите конечную задачу.
---
Элементов может быть и больше. Зачем мне описывать конечную задачу, если мне нужно решить подзадачу, которую я и описала?)
---
Потому что, случается так, что исходная задача решается другими методами проще и быстрее.
---
Где и как вы будете такое хранить? "Я не буду думать об этом сегодня, я подумаю об этом завтра" (с)
(19) случается так, что исходная задача решается другими методами проще и быстрее. Абсолютно бесполезно доказывать женщине, что ее хотелка - ошибочна. :)
---
Давайте не будем опускаться до сексизма) Во-первых, "хотелка" вовсе не моя, а пользователя. Соответственно, где и как будет "такое" храниться не моя и не ваша проблема. Стояла задача (осознанная) написать алгоритм, а не оправдать неспособность это сделать доказательствами нецелесообразности метода.
---
Элементы начального массива уникальны?
---
да
---
Нужно перебрать все возможные варианты разбития исходного количество элементов на группы, а потом для каждой группы применить алгоритм поиска сочетаний, как в https://infostart.ru/public/240261.

Пусть у нас N элементов.
Тогда группы будут (буду обозначать их количеством элементов):

N

1, N-1
2, N-2
...
N-1, 1

1, 1, N-2
1, 2, N-3
...
1, N-2, 1

2, 1 N-3
...
2, N-3, 1

и так далее, пока не дойдём до группы 1, 1, 1 ... 1 (N массивов по одному элементу)

-------

Можно попробовать пойти обратным путём:
Возьмём начальное разбиение на N массивов по одному элементу в каждом: 1, 1, 1, ... 1
Будем брать один элемент массива #1 и по очереди добавлять в каждый другой массив:
2, 1, 1, ... 1
1, 2, 1, ... 1
...
1, 1, 1, ... 2
Потом так же сделаем для элемента массива #2, потом #3 и так до N.

На следующем шаге из каждого варианта мы будем генерировать новый вариант по этому же принципу.

-------
В любом случае, количество вариантов будет расти по экспоненте.

Какое количество элементов планируется разбивать?
---
Для 4 элементов будет 47 вариантов: C(4,4) + C(4,1) * C(3,3) + C(4,2) * C(2,2) + C(4,1) * C(3,1) * C(2,2) + C(4,1) * C(3,1) * C(2,1) * C(1,1)

Для 5 уже 241: C(5,5) + C(5,2) * C(3,3) + C(5,1) * C(4,1) * C(3,3) + C(5,1) * C(4,2) * C(2,2) + C(5,1) * C(4,1) * C(3,1) * C(2,2) + C(5,1) * C(4,1) * C(3,1) * C(2,1) * C(1,1)

Конечно, это с повторами, когда (1, 2) и (2, 1) будут считаться разными вариантами.
---
Для 4 элементов будет 47 вариантов Если порядок в массивах не важен и порядок самих массивов не важен, то для 4-х элементов получается 5 различных вариантов разбиения на массивы и всего 15 вариантов распределения:
```1c
    1. (1,2,3,4)

    2. (1,2,3) (4)
    3. (1,2,4) (3)
    4. (1,4,3) (2)
    5. (4,2,3) (1)

    6. (1,2) (3,4)
    7. (1,3) (2,4)
    8. (1,4) (2,3)

    9. (1,2) (3) (4)
    10. (1,3) (2) (4)
    11. (1,4) (3) (2)
    12. (2,3) (1) (4)
    13. (4,2) (3) (1)
    14. (4,3) (2) (1)

    15. (1) (2) (3) (4)
```
---
ну да, только нужно ещё тогда уметь определять "дубли".
---
Количество элементов не важно.
Оно может быть любым.
Ну на практике, скажем, до 100 элементов будет.
---
попробовал прикинуть количество вариантов в зависимости от числа элементов и сравнил это с 2^n
1: 1 -> 2^1 = 2
2: 2 -> 2^2 = 4
3: 5 -> 2^3 = 8
4: 15 -> 2^4 = 16
5: 67 -> 2^5 = 32
6: 297 -> 2^6 = 64

Допустим даже, что мы ограничимся 2^n.

Если взять, например, 40 элементов, то количество комбинаций будет 2^40, а это примерно 10^12. Каждая комбинация содержит 40 цифр = 40 байт. Значит в памяти это будет занимать 10^12 * 40 байт = 44 терабайта.
Где и как вы будете такое хранить?

Даже если написать алгоритм, который будет такое считать, как вы будете им пользоваться? Где хранить результат вычислений? Без дополнительных ограничений что-то дельное сделать вряд ли получится.
---
Как вариант, если хотя бы примерно известно количество элементов в массиве и количество массивов, то можно в цикле с фиксированным количеством итераций можно заполнить таблицу элементами массивов и свернуть.
---
Всем спасибо, решение найдено. Получился универсальный алгоритм с нефиксированным количеством элементов. Безусловно, чем больше элементов, тем значительно дольше идет процесс. Но он идет, и на выходе получается нужный массив вариантов. Внутри алгоритма использовалась функция https://infostart.ru/1c/articles/365025/ как вспомогательная.
---
расскажите об экономическом смысле задачи