Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2011, 20:49
Аспирант
Отправить личное сообщение для Yurik Посмотреть профиль Найти все сообщения от Yurik
 
Регистрация: 07.02.2009
Сообщений: 80

перебор всех возможных значений
есть табличка 3 на 5 в каждой ячейке возможно значение от 1 до 15, подскажите алгоритм для перебора всех возможных значений таблицы
Ответить с цитированием
  #2 (permalink)  
Старый 04.08.2011, 02:27
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Накидал пример (там с forEach, но при желании можно переписать):
function f(length, from, to){
  return getResult( --length, from, to, getArray( from, to ) );
  
  function getResult(length, from, to, result){
    var newResult = [];
    getArray( from, to ).forEach(function(x){
      result.forEach(function(y){
        newResult.push( x.concat( y ) );
      });
    });
    if( --length > 0 ) return getResult(length, from, to, newResult);
    return newResult;
  };

  function getArray(from, to){
    for(var array = []; from <= to; from++)
      array.push([ from ]);
    return array;
  };
};

alert(
  f( 3, 4, 5 ).join("\n")
);
// Твой вариант f( 15, 1, 15 );


Конечно, браузер сдохнет столько вариантов считать, но алгоритм - рабочий)

Последний раз редактировалось Sweet, 04.08.2011 в 13:37. Причина: Подправил на свежую голову)
Ответить с цитированием
  #3 (permalink)  
Старый 04.08.2011, 13:11
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

function getAllCombination ( list ) {
	var len = list.length, 
		binaryList = Array(len+1).join(0).split('');
	var result = [], pos, resultStep;
	while ( true ) {
		pos = 0;
		resultStep = [];
		while ( binaryList[ pos ]  ) { 
			binaryList[ pos ] = 0; 
			pos++; 
		}
		if ( pos == len ) { break; }
		binaryList[ pos ] = 1;
		for ( var j = len; j--; ) { 
			if ( binaryList[j] ) {
				resultStep[ resultStep.length ] = list[j];
			} 
		}
		result[ result.length ] = resultStep.sort();
	}
	return result;
}

getAllCombination( [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] );

Последний раз редактировалось nikita.mmf, 04.08.2011 в 13:16.
Ответить с цитированием
  #4 (permalink)  
Старый 04.08.2011, 14:25
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Вот еще вариант с передачей матрицы, образующей формат данных:
function combinator(matrix){
  return matrix.reduceRight(function(combination, x){
    var result = [];
    x.forEach(function(a){
      combination.forEach(function(b){
        result.push( [ a ].concat( b ) );
      });
    });
    return result;
  });
};

alert(
  combinator([ [ 1, 3 ], [ "a", "b"], [ 2, 4, ] ] ).join("\n")
);

/* А это, чтобы получить все варианты авто-номеров: 
var digits = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ],
     letters = [ "A", "B", "C", "E", "H", "K", "M", "O", "P", "T", "X", "Y" ];
combinator([ letters, digits, digits, digits, letters, letters ]);
*/
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Суммирование значений всех элементов div frolvict jQuery 1 11.07.2011 17:05
Отображение всех значений точек для jquery flot Mutagena jQuery 0 29.04.2011 13:42
Установка кнопкой всех значений SELECT одинаково Лавсановые Волокна Элементы интерфейса 3 28.12.2010 13:28
Переодическое обновление значений для графика, функция для обновления значений yupa87 Общие вопросы Javascript 0 09.07.2009 14:48
Полный список всех цветов html? Бобр Оффтопик 4 13.04.2009 14:11