li:nth-child(-n+6)
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1) + min);
}
const closestTo = (dateToCompare, datesArray) => {
const buff = datesArray.filter(date => date >=dateToCompare).sort()
return buff.length ? buff[0] : undefined
}
const w = 640 // Длина волны
let red, green, blue;
if (w < 380 || w > 781) {
[red, gren, blue] = [0, 0, 0];
} else if (w < 440) {
[red, green, blue] = [(440 - w) / 60, 0, 1];
} else if (w < 490) {
[red, green, blue] = [0, (w - 440) / 50, 1];
} else if (w < 510) {
[red, green. blue] = [0, 1, (510 - w) / 20];
} else if (w < 580) {
[red, green, blue] = [(w - 510) / 70, 1, 0];
} else if (w < 645) {
[red, green, blue] = [1, (645 - w) / 65, 0];
} else {
[red, green, blue] = [1, 0, 0];
}
let factor;
if (w < 380 || w > 781) {
factor = 0;
} else if (w < 420) {
factor = 0.3 + 0.7 * (w - 380) / 40;
} else if (w < 701) {
factor = 1.0;
} else {
factor = 0.3 + 0.7 * (780 - w) / 80;
}
const gamma = 0.8;
const R = (red > 0 ? 255 * Math.pow(red * factor, gamma) : 0);
const G = (green > 0 ? 255 * Math.pow(green * factor, gamma) : 0);
const B = (blue > 0 ? 255 * Math.pow(blue * factor, gamma) : 0);
const color = `rgb(${R}, ${G}, ${B})`;
console.log(color); // rgb(255, 32.763138565028974, 0)
Маска: 11111111.11111111.11111110.00000000 = 255.255.254.0
Адрес 1: 11000000.10101000.00000000.00000000 = 192.168.0.0
Адрес 2: 11000000.10101000.00000001.00000000 = 192.168.1.0
Чтобы преобразовать эти адреса в сети надо выполнить побитовый логический AND адреса с маской. Получим192.168.0.0 & 255.255.254.0 = 192.168.0.0
192.168.1.0 & 255.255.254.0 = 192.168.0.0
Таким образом, оба адреса входят в одну сеть размера /23.function getJSONP (script_url, callback) {
// Создаём веб-воркер, который импортирует нам скрипт с коллбэком(jsonp)
const worker = new Worker(window.URL.createObjectURL(new Blob([
'let cb=function(val){postMessage(val)};' +
'importScripts(\'' + script_url + '&callback=cb\');'],
{ type: 'text/javascript' }
)))
// Слушаем ответ от воркера
worker.onmessage = (e) => {
worker.terminate()
callback(e.data)
}
// Убиваем воркер если долго нет ответа
setTimeout(() => { worker.terminate() },10000)
}
WITH
cte1 AS ( SELECT t1.ts, t1.val,
t2.ts ts_before, t2.val val_before,
t3.ts ts_after, t3.val val_after
FROM test t1
JOIN test t2 ON t1.ts >= TIMESTAMP(t2.ts, @delta)
JOIN test t3 ON t1.ts <= TIMESTAMP(t3.ts, @delta) ),
cte2 AS ( SELECT *,
ROW_NUMBER() OVER (PARTITION BY ts ORDER BY ts_before DESC) rn_before,
ROW_NUMBER() OVER (PARTITION BY ts ORDER BY ts_after ASC) rn_after
FROM cte1 )
SELECT ts,
val,
ts_before,
val_before,
ts_after,
val_after,
CASE WHEN val_after = val_before
THEN val_before
ELSE val_before + (val_after - val_before) / TIMESTAMPDIFF(SECOND, ts_after, ts_before) * TIMESTAMPDIFF(SECOND, ts, TIMESTAMP(ts_before, @delta))
END val_approximated
FROM cte2
WHERE ts > '2021-01-02'
AND rn_before = 1
AND rn_after = 1
Не имел дела раньше с оконными функциями в MySQL.