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

рони,
Смотри, я меняю только размерность, строка 25, всё остальное то же самое.
// Multidimensional to single dimension representation

var m2sdim = ( function () {

  var argNames = 'abcdefghijklmnopqrstuvwxyz'.split('');

  return function ( /* arguments */ ) {

    var dimension = arguments.length;
    var fnSource = argNames[0];
    var size = +arguments[0];

    for ( var i = 1; i < dimension; i++ ) {
      fnSource = '(' + fnSource + '*' + +arguments[i] + '+ +' + argNames[i] + ')';
      size *= +arguments[i];
    }

    var fn = Function.apply( null, argNames.slice( 0, dimension ).concat( 'return ' + fnSource ));
    fn.size = size;

    return fn;
  };
})();

var test = m2sdim(2,122,2,9999);

console.log([
  test.toString(),
  test(0,0,0,1),
  test(0,0,1,0),
  test(0,1,0,0),
  test(1,0,0,0),
  test.size // размер массива
].join('\n'));

Обрати внимание на исходник скомпилированной функции.
Аргументы идут с первого, коэффициенты - со второго. Вот и весь компот.
__________________

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

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