Загрузка данных


(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);
})();