#javascript #алгоритм #разработка_игр #комбинаторика
Пишу игру на js. Есть массив из 5 элементов^ ['a', 'b', 'c', 'd', 'e']; Мне нужно получить все возможные сочетания элементов этого массива при том, что элементов может быть от 1 до 5. Т.е.: ['a', 'b', 'c', 'd']; ['b', 'e']; ['a', 'c', 'd']; ['d'] итд... Как это сделать?
Ответы
Ответ 1
То, что вы хотите, называется не сочетаниями, а кортежами. Простейший способ - цикл от 0 до 31 (2^5-1), и в каждом кортеже имеются те элементы, которые соответствуют единичным битам числа. Другие варианты генерации всех кортежей вы можете найти в книге Д. Кнута Искусство программирования, т.4А.Ответ 2
JS не очень хорошо знаю, но попробую предложить решение. В цикле перебираете числа от 1 до 31. Для каждого значения переводите в двоичную форму. Например так: i.toString(2) Получаете строку примерно такого вида: 11010 Выбираете те элементы массива, для которых на соответствующей позиции стоит 1, и игнорируете те, для которых ноль. Например с помощью функции filter: var arr = ['a', 'b', 'c', 'd', 'e'] for(i=1; i<=31; i++) { b = i.toString(2) while(b.length < 5) {b = '0' + b} var farr = arr.filter( function(item, n, arr) { return b.charAt(4-n) > 0 }) document.writeln(farr + '
') }
Комментариев нет:
Отправить комментарий