Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 13.02.2014, 23:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,084

Дзен-трансгуманист,
в чём разница?
function test(c) {
    for (var d = 5, a = 0, b = 0; b < c.length; b++) a *= d, a += c[b], d++;
    return a
};
alert([test([0,0,0,1]),test([0,0,1,0]), test([0,1,0,0]),test([1,0,0,0])]);
Ответить с цитированием
  #42 (permalink)  
Старый 13.02.2014, 23:59
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

рони,
Стоп, это уже полный бардак...

Сначала я подумал, что твоя функция должна возвращать размер. Но, видимо, на самом деле она возвращает индекс.

Тогда вопрос, откуда твоему универсальному преобразователю заранее известно, какие диапазоны x, y, z и т.д. я от нее требую?
А что если размерность такая: [2][122][2][9999]? То есть, в чем тут универсальность?

Ты наверно решил, что последовательность 5,6,7 арифметическая, или что? Я же эти цифры от фонаря придумал))) Цель была проста: показать, что многомерный массив известной величины можно легко свести к одномерному. Что собственно и происходит на практике в языках, где они поддерживаются.
__________________

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

Последний раз редактировалось Дзен-трансгуманист, 14.02.2014 в 00:03.
Ответить с цитированием
  #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.
Ответить с цитированием
  #44 (permalink)  
Старый 14.02.2014, 00:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,084

Дзен-трансгуманист,
ок!
Ответить с цитированием
  #45 (permalink)  
Старый 14.02.2014, 00:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,084

Дзен-трансгуманист,
специальный выпуск с предварительной инициализацией

function m(c) {
     return function (d) {
         for (var b = 0, a = 0, e = c[b]; b < d.length;) a *= e, a += d[b], e = c[++b];
         return a
     }
 };

var test = m([2,122,2,9999])
alert([test([0,0,0,1]),test([0,0,1,0]), test([0,1,0,0]),test([1,0,0,0])]);
Ответить с цитированием
  #46 (permalink)  
Старый 14.02.2014, 01:30
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

function m(c) {
     return function (d) {
         for (var b = 0, a = 0, e = c[b]; b < d.length;) a *= e, a += d[b], e = c[++b];
         return a
     }
 };

var dim = [2,122,2,9999];
var test = m(dim)
dim.pop(); // ой!
alert([test([0,0,0,1]),test([0,0,1,0]), test([0,1,0,0]),test([1,0,0,0])]);

рони,
Ну а в целом, да, кратко и понятно. Для примера сойдет.
__________________

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #47 (permalink)  
Старый 14.02.2014, 01:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,084

Сообщение от Дзен-трансгуманист
Ну а в целом, да, кратко и понятно. Для примера сойдет
непонял что вы хотели этим сказать что в коде нет защиты от дурака?

function m(k) {
    var c = k.join('.').split('.');
    return function (d) {
        if (c.length != d.length) return -1;
        for (var a = 0, b = 0, e = c[a]; a < d.length;) {
            if (d[a] >= c[a]) return -1;
            b *= e;
            b += d[a];
            e = c[++a]
        }
        return b
    }
};

var dim = [2,122,2,9999];
var test = m(dim)
dim.pop(); // ой!
alert([test([0,0,0,1]),test([0,0,1,0]), test([0,1,0,0]),test([1,0,0,0])]);

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

Сообщение от рони
непонял что вы хотели этим сказать что в коде нет защиты от дурака?
Про защиту от дурака сказано в "// ой!".
Но отдельно я намекаю на то, что хоть для демонстрации этого достаточно, но в реальных задачах, где требуются тысячи и миллионы преобразований в секунду, пробежка по массиву будет тормозом. Почему я сразу сделал такое решение - линейное выражение быстрее цикла.
Конечно, еще я должен был бы раскрыть скобки, так как это способствует распараллеливанию. Но поленился.
__________________

Гейзенберг, возможно, читал этот тред.
Ответить с цитированием
  #49 (permalink)  
Старый 14.02.2014, 14:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,084

Дзен-трансгуманист,
ок!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из одного массива удалить элементы другого... t3mir1an Events/DOM/Window 4 22.10.2013 11:14
Не могу выбрать и удалить клонируемые элементы AlexPrm jQuery 6 30.05.2010 15:58
Пустые элементы массива lammeR Общие вопросы Javascript 5 25.05.2010 02:59
Как удалить повторные элементы из массива? YISHIMITSY Общие вопросы Javascript 1 04.05.2010 00:04
Как удалить все пустые элементы UL smashercosmo Events/DOM/Window 13 25.02.2009 09:03