<ifModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include mime ^text\.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_include mime ^application/javascript.*
mod_gzip_item_exclude mime ^image\.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
<ifModule mod_headers.c>
<filesMatch "\.(ico|jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "public"
</filesMatch>
<filesMatch "\.(css)$">
Header set Cache-Control "public"
</filesMatch>
<filesMatch "\.(js)$">
Header set Cache-Control "public"
</filesMatch>
<filesMatch "\.(x?html?|php)$">
Header set Cache-Control "private, must-revalidate"
</filesMatch>
</ifModule>
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 7 days"
ExpiresByType image/x-icon "access plus 6 month"
ExpiresByType image/jpeg "access plus 6 month"
ExpiresByType image/jpg "access plus 6 month"
ExpiresByType image/png "access plus 6 month"
ExpiresByType image/gif "access plus 6 month"
ExpiresByType application/x-shockwave-flash "access plus 6 month"
ExpiresByType text/css "access plus 7504800 seconds"
ExpiresByType text/javascript "access plus 7516000 seconds"
ExpiresByType application/javascript "access plus 7516000 seconds"
ExpiresByType application/x-javascript "access plus 7516000 seconds"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
center: [coord_x, coord_y;],
этой части. Как это работает? А еще, где подключены скрипты? function balance(arr1, arr2) {
let all = arr1.concat(arr2);
//all.sort((a, b) => a - b); //Для исключения одинаковых.
let all_sum = all.reduce((a,b)=>a+b,0);
let len = all.length;
let cnt = Math.floor(len * 0.5);
let arr_result = new Array(cnt); //Массив выбранных индексов
let idx_begin = 0; //Начальная глубина перебора (индекс в arr_result)
let sum_begin = 0; //Начальная сумма частично перебранных элементов
if (cnt === len * 0.5) { //Оптимизация
arr_result[0] = 0;
idx_begin = 1;
sum_begin = all[0];
}
let min_diff = all_sum; //Присваиваем какое-то заведомо большое число.
let arr_answer; //Итоговый ответ
//Проверяем следующий уровень глубины
//idx - глубина, sum - сумма всех элементов до этого
function check(idx, sum) {
if (idx === cnt) { //Конец перебора. Проверяем, подходит ли.
let diff = Math.abs((all_sum - sum) - sum);
if (diff < min_diff) { //Подходит
min_diff = diff; //Запоминаем новый лучший результат.
arr_answer = arr_result.slice(); //Копируем
}
return;
}
//Иначе идем дальше вглубь на следующий уровень.
let start = idx === 0 ? 0 : arr_result[idx-1] + 1;
let max = len - cnt + idx;
for(let i = start; i <= max; i++){ //Ключевой цикл алгоритма
//if (i > start && all[i] === all[i-1]) continue;
arr_result[idx] = i;
check(idx+1, sum+all[i]); //Рекурсия
}
}
check(idx_begin,sum_begin); //Начать перебор. Поехали!
arr1 = [];
arr2 = [];
//Фасуем полученный ответ по массивам уже в виде значений.
let j = 0;
all.forEach((e,i)=>{
if (i === arr_answer[j]) {
arr1.push(e);
j++;
} else arr2.push(e);
});
return {
arr1: arr1,
arr2: arr2,
sum1: arr1.reduce((a,b)=>a+b,0),
sum2: arr2.reduce((a,b)=>a+b,0),
}
}
var arr1 = [10, 300, 25, 75];
var arr2 = [50, 125, 500, 10];
balance(arr1, arr2);