Дзен-трансгуманист,
маленький универсальный преобразователь к одномерному виду :write: :dance:
function x(c) {
for (var d = 5, a = 0, b = 0; b < c.length; b++) a *= d, a += c[b], d++;
return a
};
alert([x([4]),x([4,5]),x([4,5,6]),x([4,5,6,7])])
|
рони,
Чёто не то наворочено. :) |
А разномерный массив-это правильно?
|
Цитата:
function m(c) {
for (var d = 5, a = 0, b = 0; b < c.length; b++) a *= d, a += c[b], d++;
return a
};
var i=[];
for (var x=0; x<5; x++) for (var y=0; y<6; y++) for (var z=0; z<7; z++) i.push(m([x,y,z]));
console.log(i.join(', '));
|
вот это действительно наркомания :)
|
массив с массивами...указательный массив.
В яваскрипте нет названия для такого массива? Ссылочный массив пусть будет или тоже неправильно? А то какая-то "непонятина" получается. |
Цитата:
Цитата:
Во-вторых, счет идет с нуля, последний индекс = размер-1. Я там продемонстрировал, что приведенная в пример формула дает корректный порядок индексов. Естественно, последнее число было на единицу меньше общего размера. И наконец, я бы даже не догадался, что эта функция должна вычислять размер, если бы начал читать тему с этой страницы. :) Что там за d = 5? |
Цитата:
Цитата:
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
</head>
<body>
<script>
function m(c) {
for (var d = 5, a = 0, b = 0; b < c.length; b++) a *= d, a += c[b], d++;
return a
};
for (var x=0; x<5; x++) for (var y=0; y<6; y++) document.write('['+ x +','+ y +'] : '+m([x,y])+'<br>');
</script>
</body>
</html>
|
Цитата:
Обфускация концептуально необходима? :D |
// 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(5,6,7,8);
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'));
Как можно догадаться, тут максимум на 26 измерений. Но для примера, думаю, достаточно. :) |
| Часовой пояс GMT +3, время: 02:09. |