(function() {
console.log("Запуск Бит-Профи v7.0 (Локация: bitsBoardWrap)");
const DELAY = 200;
// Веса для идеальной "змейки" в правый нижний угол
const weights = [
[2, 5, 10, 20],
[4, 15, 30, 60],
[8, 25, 100, 500],
[16, 50, 1000, 10000]
];
function getGrid() {
let grid = Array(4).fill(0).map(() => Array(4).fill(0));
const board = document.getElementById('bitsBoardWrap');
if (!board) return null;
const tiles = Array.from(board.querySelectorAll('div')).filter(el =>
el.innerText && /bit|бит|байт|byte|кб|kb/i.test(el.innerText)
);
const bRect = board.getBoundingClientRect();
const cellW = bRect.width / 4;
const cellH = bRect.height / 4;
tiles.forEach(tile => {
const tRect = tile.getBoundingClientRect();
const col = Math.floor((tRect.left - bRect.left + cellW / 2) / cellW);
const row = Math.floor((tRect.top - bRect.top + cellH / 2) / cellH);
// Продвинутая конвертация величин в единое число (в битах)
let txt = tile.innerText.toLowerCase();
let val = parseInt(txt.replace(/[^0-9]/g, '')) || 0;
if (txt.includes('байт') || txt.includes('byte')) val *= 8;
else if (txt.includes('кб') || txt.includes('kb')) val *= 8192;
if (row >= 0 && row < 4 && col >= 0 && col < 4) grid[row][col] = val;
});
return grid;
}
function evaluate(grid) {
let score = 0;
let empty = 0;
for (let r = 0; r < 4; r++) {
for (let c = 0; c < 4; c++) {
if (grid[r][c] > 0) {
score += Math.log2(grid[r][c]) * weights[r][c];
} else empty++;
}
}
return score + (empty * 100);
}
function sendKey(dir) {
const codes = { 'U': 38, 'R': 39, 'D': 40, 'L': 37 };
const k = 'Arrow' + (dir==='U'?'Up':dir==='R'?'Right':dir==='D'?'Down':'Left');
const ev = new KeyboardEvent('keydown', { key: k, code: k, keyCode: codes[dir], bubbles: true });
window.dispatchEvent(ev);
}
const brain = setInterval(() => {
const grid = getGrid();
if (!grid) return;
const scoreD = evaluate(grid);
const scoreR = evaluate(grid) * 0.9;
const empty = grid.flat().filter(v => v === 0).length;
if (empty > 1) {
// Основной цикл: Вниз -> Вправо
if (scoreD >= scoreR) sendKey('D');
else sendKey('R');
} else {
// Если прижали: пробуем выжить
if (Math.random() > 0.3) sendKey('D');
else if (Math.random() > 0.1) sendKey('R');
else sendKey('L');
}
if (document.body.innerText.includes("Игра окончена")) clearInterval(brain);
}, DELAY);
})();