rows
. Период этой «пилы» от верхнего пика до следующего верхнего пика составляет 2 * (rows - 1)
. Остаток от деления на этот период будет означать позицию внутри одного «зуба»:остаток: 0 1 2 3 4 5
строка: 0 1 2 3 2 1 – это хочется в итоге как-то получать
y = 0
и тогда отражение легко сделать, взяв абсолютное значение Math.abs()
:y : 3 2 1 0 -1 -2
abs: 3 2 1 0 1 2
0 1 2 3 4 5
, а нужно получить из него 3 2 1 0 -1 -2
. Умножить на -1 и добавить 3: Math.abs(rows - 1 - ost)
var i, ost, row, rows=4, period = 2 * (rows - 1); // 0 0 0 | 6 0 0
for(i = 0; i < 10; i++) { // 1 1 1 | 7 1 1
ost = i % period; // 2 2 2 | 8 2 2
row = rows - 1 - Math.abs(rows - 1 - ost); // 3 3 3 | 9 3 3
console.log( i, ost, row); // 4 4 2 | 10 4 2
} // 5 5 1 | 11 5 1
function encrypt( text, n) {
var i, ost, period = 2 * (n-1), r, row, out = [];
text = text.replace(/\s/g,""); // убрать пробелы
for(r = 0; r < period; r++) out[r] = ""; // пустые строки
for(i = 0; i<text.length; i++) {
ost = i % period;
row = n - 1 - Math.abs(n - 1 - ost)
out[row] += text.substr(i,1);
}
return out.join("");
}
function test( text, rows) {
var pre = document.createElement("pre");
pre.innerHTML = encrypt(text, rows);
document.body.appendChild(pre);
}
test("этот текст зашифрован", 4); // экинтесшфаоттарвтзо
function makeMap( len, n) {
var i, pip, period = 2 * ( n - 1);
var rows = Array.apply( null, Array( n)).map( function(){ return []});
for( i = 0; i < len; i++) {
pip = i % period;
r = pip < ( n - 1) ? pip : period - pip;
rows[ r].push( i);
}
return Array.concat.apply( null, rows);
}
function decrypt( text, n) {
var map = makeMap( text.length, n);
return text.split('').reduce(function(p,c,i,a){ return p + a[map.indexOf(i)]},'');
}
function encrypt( text, n) {
var map = makeMap( text.length, n);
return text.split('').reduce(function(p,c,i,a){ return p + a[map[i]]},'');
}
rsync -avz lsd_user@oldLinuxServer:///var/www/pornosite/images /home/happynewadmin/funnyPics
a
– рекурсия в подпаки и попытается передать и атрибуты прав файлов и линки сохранить. Наверное, тоже необязательно – можно вместо него r
– только рекурсия в подпапки.v
– будет подробно лить в консоль путь каждого скопированного файла. Наверное лучше убрать и вместо него q
– вывод только ошибок/предупреждений;z
– будет пытаться жать файлы для передачи меньшего объёма. С jpeg'ами малоэффективно. Можно забить.var a = 1, b = 2; // эти a, b – «глобальные», выше всех, «видны» везде
function calculate(x, y, z) {
// здесь определены локальные переменные x, y, z
// и видны все переменные из уровней выше
// напр. a и b
// ждём, что x – это будет функция
return x( y+a, z+b); // можно использовать и локальные и глобальные
}
function sum( a, b){ // а вот тут a,b – переопределены локально
// и к тем, глобальным a и b не имеют никакого отношения!
return a+b; // складывает те a и b, что передали при очередном вызове sum()
}
calculate( sum, 5, 6); // вызывает calculate, и там будет x = sum, y=5, z=6
sum( 7, 8); // вызывает напрямую sum, внутри которого будет a=7 и b=8
// при этом глобальные a и b никак не пострадают.
var n = 12345678;
n = n.toString(10).replace(/(\d)(?=(\d{3})+$)/g, '$1 '); // 12 345 678
var n = 123456789;
var a = n
.toString(10)
.split('').reverse()
.map(function(e,i){ return (i%3 ? e : ""+e+" ")})
.reverse()
.join('')
.trim()
;
// a = "123 456 789"
test.on()
– со скобками.var test=function(){
console.log("method:", arguments[0]);
};
var handler = {
get: function( target, name) {
var _method;
if(name in target) {
return target[name];
} else {
return target.bind( null, name); // если не определено свойство, передаем его 1-м аргументом
}
}
};
test = new Proxy( test, handler);
test.on(); // method: on
test.blabla(); // method: blabla
test(); // method: undefined
https://vk.com/al_apps.php
, который выполняется при удалении приложения в интерфейсе ВК тоже сложно – помимо act=quit,al=1,id=111111
там передаётся некий вычисляемый параметр hash.$info = pathinfo('/doc2/Тестовый документ.pdf');
echo $info['filename']; // Тестовый документ
var answer;
do {
answer = prompt("Скажи 'стоп'", "");
document.write("Ты сказал '" + answer + "'.");
} while (answer !== "стоп");
while( условие) { действия }
do{ действия } while( условие )
var event = new MouseEvent('dblclick', {
'view': window,
'bubbles': true,
'cancelable': true
});
document.getElementById('button').dispatchEvent(event);
function nds( cost) {
return function() {
var _cost = cost;
var result = _cost * 1.13;
console.log( result.toFixed(2));
}
}
var a = nds(53);
var b = nds(12);
a(); // 59.89
b(); // 13.56
var total = 0;
function nds( cost) {
return function() {
var _cost = cost; // запомнили внутри цену
var result = _cost * 1.13; // добавили НДС
total += result; // добавили к общей сумме
console.log( "result:", result.toFixed(2), "total:", total.toFixed(2));
}
}
var a = nds(53);
var b = nds(12);
a(); // result: 59.89 total: 59.89
b(); // result: 13.56 total: 73.45
a(); // result: 59.89 total: 133.34
a(); // result: 59.89 total: 193.23