Усложненная генерация перестановок (желательно JS, но и псевдокод подойдёт)?
Всем привет. Есть от 1 до 8 массивов, в каждом из которых от 2 до 4 элементов (все элементы цифры). Нужно перебрать все эти цифры таким образом, чтобы получились все возможные варианты числа от 1 до 8 знаков. Например, есть массивы [1, 2, 3], [2, 3, 4], [5, 6], [7, 8, 9]. Нужно как-то сделать так, чтобы получились всевозможные варианты числа, например, 1359, 2258 и т. д.
Подскажите пожалуйста, в какую сторону копать, какой алгоритм использовать. Думал реализовать это через 8 циклов, если допустим массивов будет всего 4, то тогда 5 и далее цикл не запускается, но что-то кажется мне это совсем колхоз и должен быть какой-то изящный вариант. Знания очень слабые, но решить задачу хочется.
Желательно без готовых решений, а просто написать алгоритм, даже словами. Заранее большое спасибо!
Сергей Соколов, в данном примере это получается как бы 3 варианта значения, которое это число может принимать, то есть первый массив это число, которое может принимать значение либо 1, либо 2, либо 3, второй это число, которое может принимать значение либо 2, либо 3, либо 4 и т. д., в результате из возможных значений для каждого из 4-х чисел должно получится 4-хзначное число, возможные значения для каждого числа от 1-го до 4-х, а конечное число может быть от 1 до 8 знаков длиной
Сергей Соколов, нет, смотрите, на входе мы получаем число от 1 до 8 знаков длиной, каждый знак может принимать от 1 до 4 вариантов значения (например, на входе число 4256, 4 может принимать значения [1, 4, 5], 2 может принимать значения [1, 3, 5] и т. д.), какое значение может принимать каждое из чисел известно заранее и записано в массив, теперь нам нужно сделать так, чтобы мы получили все возможные варианты значений для полученного на входе числа и вывели все их в строку через запятую
Katsimoto, можно запустить код в дебаггере, поставив точку останова внутри первого редьюса, и посмотреть на промежуточные результаты, тогда станет понятнее
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.