@Katsimoto

Усложненная генерация перестановок (желательно JS, но и псевдокод подойдёт)?

Всем привет. Есть от 1 до 8 массивов, в каждом из которых от 2 до 4 элементов (все элементы цифры). Нужно перебрать все эти цифры таким образом, чтобы получились все возможные варианты числа от 1 до 8 знаков. Например, есть массивы [1, 2, 3], [2, 3, 4], [5, 6], [7, 8, 9]. Нужно как-то сделать так, чтобы получились всевозможные варианты числа, например, 1359, 2258 и т. д.
Подскажите пожалуйста, в какую сторону копать, какой алгоритм использовать. Думал реализовать это через 8 циклов, если допустим массивов будет всего 4, то тогда 5 и далее цикл не запускается, но что-то кажется мне это совсем колхоз и должен быть какой-то изящный вариант. Знания очень слабые, но решить задачу хочется.
Желательно без готовых решений, а просто написать алгоритм, даже словами. Заранее большое спасибо!
  • Вопрос задан
  • 301 просмотр
Решения вопроса 2
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
const parts = [
  [0, 1],
  [0, 1, 2, 3],
  [0, 1, 2],
  [0, 1, 2, 3, 4, 5],
  [0, 1, 2],
  [0, 1, 2, 3],
  [0, 1],
  [0, 1, 2]
];
const result = parts.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []));

console.log(result.map(a => a.join(', ')));
Ответ написан
pterodaktil
@pterodaktil
js developer
arr.reduce((acc, numbers, index) => {
  return index === 0 ? numbers : numbers.reduce((numAcc, num) => {
    return [...numAcc, ...acc.map(i => `${i}${num}`)]
  }, []);
}, []);

но жрет сие действо кучу памяти)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы