requestAnimationFrame()
, реже срабатывают таймеры. for(let i = 0; i < 18; i++){
let block = document.createElement('div');
field.appendChild(block);
block.classList.add('blocks');
block.addEventListener('click', event => onClick(event, i));
}
||
const year = prompt('В каком году появилась спецификация ECMAScript-2015?');
alert( year == '2015' || year == '2016' ? 'правильно' : 'неправильно' );
x > y
, значит, x = y + ненулевое_число
. Можно так перезаписать слагаемые:m = k0
z = m + k1 = k0 + k1
y = z + k2 = k0 + k1 + k2
x = y + k3 = k0 + k1 + k2 + k3
-----------------------------
m+z+y+x = 4k0 + 3k1 + 2k2 + k3 = SUM
ki — это натуральные числа от 1. k
— вычислили x, y, z, m.k0
k1..k3
уходит минимум 6, когда все по 1,k0
остаётся диапазон [1, (SUM - 6) / 4]
k0
должен быть целым.k0
в этом диапазоне, SUM1 = SUM - 4 * k0
,3k1 + 2k2 + k3 = SUM1
k3
это весь остаток.const addUpTo = (top, n) => {
const getDiffs = (sum, n, acc = []) => {
if (n === 1) {
x = sum;
} else {
const headroom = (n - 1) * n / 2;
const cap = Math.floor((sum - headroom) / n);
if (cap < 1) throw("Impossible. " + JSON.stringify(acc));
x = 1 + Math.floor(Math.random() * cap);
}
acc.push(x);
if (n <= 1) {
return acc;
} else {
return getDiffs(sum - x * n, n - 1, acc);
}
}
return getDiffs(top, n).map((_, i, a) => a.reduce((acc, c, j) => j <= i ? acc + c : acc)).reverse();
}
addUpTo(100, 4) /*
[ 34, 30, 21, 15 ]
[ 31, 24, 23, 22 ]
[ 66, 17, 13, 4 ]
[ 47, 22, 21, 10 ]
...
*/
addUpTo(10, 4) // [ 4, 3, 2, 1 ]
addUpTo(9, 4) // ошибка, невозможно разложить
$timestamp = date('2020-03-29T23:59:00+03:00'); // +03:00 потому что по МСК
echo "<script>const theMoment = ${timestamp};</script>";
const checkTime = (ts) => {
if (Date.now() < ts) return setTimeout(() => checkTime(ts), 1000);
// время пришло
document.getElementById('price').innerText = '39 990';
}
checkTime(theMoment * 1000); // в JS timestamp считается в миллисекундах
// а из PHP приходит в целых секундах
<p>
Специальная цена на наш утюг: <span id="price">29 990</span>
<br>
действует до 30 марта!
</p>
indexOf()
this.children
, а хочется.[]
и его метод indexOf
call()
(подробнее)indexOf
в качестве this
(где искать) — this.children
,event.target
event.target
среди this.children
-1
, если не нашлось. test()
можно обернуть исходные функции с их аргументами в функции:function test(fn1, fn2){
if(fn1()){
console.log('blabla');
} else {
fn2();
}
}
// в вызове оборачивайте в функции:
test(() => real_function1(arg0, arg1), () => real_function2(arg3));
test(real_func1.bind(null, arg1, arg2), real_func2.bind(null, arg3));
d
делается с помощью тега animate
, где указываются атрибуты from
и to
– состояния из которого, и куда.d
, но останется ощущение «шагов» в таком движении.version: "3.7"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres