Показать сообщение отдельно
  #3 (permalink)  
Старый 08.01.2013, 16:13
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Сообщение от Gambit228
все возможные массивы натуральных чисел
Вариант 1: Если порядок взаимного расположения чисел в массиве неважен (Разбиение числа)
function createPartitionIterator ( integer ) {

  if ( !isFinite( integer = +integer ) || integer < 1 || integer != integer ^ 0 ) {
    return null;
  }

  var layout = [ integer ];

  return function () {

    if ( !layout ) {
      return null;
    }

    var result, rest, last, offset = layout.length;

    while ( offset-- && layout[ offset ] == 1 ) {}

    if ( offset >= 0 ) {

      result = [].concat( layout );

      rest = layout.length - offset;
      last = --layout[ offset++ ];

      while ( rest > last ) {
        layout[ offset++ ] = last;
        rest -= last;
      }

      layout[ offset++ ] = rest;
      layout.length = offset;
    }

    else {

      result = layout;
      layout = null;
    }

    return result;
  }
}

function test ( integer ) {

  var text = '';
  var next = createPartitionIterator( integer );
  var layout;

  while ( layout = next() ) {
    text += layout + '\n';
  }

  alert( text );
}

test( 2 );
test( 5 );
test( 7 );
test( 10 );
__________________

Гейзенберг, возможно, читал этот тред.

Последний раз редактировалось Дзен-трансгуманист, 08.01.2013 в 16:22.
Ответить с цитированием