Всем привет. Сегодня мы снова будем генерировать задачи при помощи ИИ и их решать. Это уже девятая статья про решение задач от ИИ, и в этом есть что-то интересное.
Интересна сама генерация задачи искусственным интеллектом, как он это делает, как он с этим справляется и чем он отличается в этом от других ИИ.
Очень сильно мне понравился формат, где нужно исправлять баги в коде. Якобы у нас есть рабочий проект с готовым кодом, а нам нужно найти и исправить в нём ошибки. Искать и исправлять баги в коде мне очень нравится, мне кажется, я скоро достигну совершенства в этом 😄. (шутка)
Но нужно быть готовым ко всему, так как ИИ может достаточно сильно чудить.
Ну что ж, давайте начнём.
Генерируем задачу
Сегодня мне хочется поработать с проектом, где надо что-то считать. Это должно быть веб-приложение, где много всяких панелей и кнопок, которое выполняет всякие вычисления. Давайте попробуем сгенерировать что-то такое
Он выдал нам список. Ого, космический навигатор!! Ядерный реактор 😃? Финансовый детектор мошеннических транзакций? Апокалипсис-калькулятор 🤣??
Мне нравятся задачи №1, №7 и №10. Знаете, обычно каждую новую статью я начинаю с нового запроса для ИИ. Следующие две статьи я буду делать по задачам №7 и №10 из этого запроса.
Давайте посмотрим задачу №10, что за "Инженерный расчёт разрушения моста при резонансе"?
Он выдал мне довольно большой код, даже не знаю, насколько будет разумным вставлять его сюда...
Ухх... Это что? Это ИИ сгенерировал?? 😨
Дизайн мощный, но баги всё равно есть. Буквы чёрные, ничего не видно.
Интересно, а это, получается, картинка моста.
Ой, как не хорошо, как ужасно!! Я нажал на кнопку "принудительное разрушение" и мост разрушился... Вы только посмотрите на эти эмодзи.
Список багов выглядит так. Все баги связаны с расчётами.
Если честно, для блога мне такое записывать смысла нет. Каких-то крупных и зрелищных багов нет, все баги связаны с неправильными значениями, нужно капаться в функциях и только менять формулы. Да и думаю, здесь будет много физики, придётся в ней разбираться мне и зрителям.
Мне надо что-то более подходящее для блога. Мне нужно, чтобы зрители всё поняли, им было интересно и понятно.
Так, а вот это уже звучит по интереснее. Надеюсь, так окажется и в действительности...
Код по-прежнему генерируется очень долго, в прошлый раз код был на 515 строк. Это намного больше, чем я обычно вставляю в блог.
Ух... Выглядит снова мощно и снова эти чёрные буквы, из за которых ничего не видно.
Ничего, это можно быстро исправить, можно задать "body" свойство "color: white"
Вот теперь это действительно выглядит мощно. Посмотрите на название вкладки 😁.
А внизу ещё и продолжение есть
Мне нравится такая задача 😃. Буду брать!!
Но мне не нравится стиль панели, мне хочется что-то другое. Как-то не серьёзно это... Не знаю, как можно описать такой стиль, но такое мне обычно не нравится... Попрошу ИИ перегенерировать.
Вот, другое дело. Такое мне больше нравится. Это уже по-серьёзному...
Очень крутая панель. Так как же играть в это?
Внизу выбираешь отряды для столкновения, выбираешь оружие для нападения и нажимаешь на кнопку.
"Лесному союзу" снесло часть полосы здоровья... Интересно...
Давайте посмотрим на список багов.
Очень важно проверять такие задачи, так как их генерирует ИИ.
Смотрим баг №1. Я буду вам нужные места выделять жёлтым, так как кнопок слишком много. Так и запутаться можно.
Если наносить слабым оружием по сильной броне, враг будет регенерироваться. Я включил всем глобальный щит, выбрал "Лесной союз" с самым слабым оружием "кинжал". Выключил полностью критический урон и начал нападать.
В итоге враг регенерироваться не стал. Баг №1 не работает.
Зато я случайно нашёл баг №2. При отключении критического урона, он всё равно проходит. Так у нас он не то, что проходит, он у нас наоборот, проходит со 100% вероятностью. Так быть не должно.
Смотрим дальше
Попробуем убить 1 отряд, посмотреть, будет ли отрицательное здоровье, а потом этим отрядом нападём на других.
Пау... Вот и всё... Северный легион пал...
Он даже потемнел... Как грустно 🙁...
Но полоса здоровья не стала отрицательной, баг №4 не сработал.
Так, сейчас мы будем устраивать атаку мертвецов!! Мёртвые наступают!!!
Да, "Северный Легион" хоть и умер, но он всё равно может нападать.
И получается из 4-ёх багов у нас работает только баг №2 и баг №3. Вот вам и ИИ.
Перегенерируем
Так, ну на этот раз DeepSeek не упрямится и не доказывает, что он прав.
Код слишком большой, чтобы я его показывал вам, там 500 строк...
Так, очень хорошо, что он мне дополнительно описал, как можно проверить эти баги.
Да, Баг №1 работает, Северный Легион лечится.
Только вот как понимать это?? Если это баг, зачем об этом пишется в консоле?? Странный эффект, броня отразила удар и восстановила HP. Так это же баг, а значит он не предвиден, у него не должно быть сообщения в консоле.
Так, смотрим баг №4. Нужно добить отряд с 10-20 HP сильным уроном.
Баг также не работает...
Зато в консоле написано, ошибка расчёта, здоровье ушло в минус.
ИИ надо постоянно перепроверять. У меня ещё баг №2 работать перестал.
Так, я перегенерировал задачу ещё раз, баг №4 заработал.
Баг №1 с регенерацией тоже работает. 103% здоровья явно не норма. Да и баг №3 работает, мы им можем атаковать.
А вот баг №2 на криты при 0% шансов крита я проверить не могу из за бага №1, из за которого все лечатся.
Так, ну что ж... Этот ИИ только с третьей попытки сделал так, чтобы все баги заработали, давайте начинать решать задачу.
Решаем задачу
Я попросил его ещё раз дать нам список багов, он мне дал это.
Он даже подписал, в какой функции искать баг. Но нет, мы лёгких путей не ищем, я сам разберусь. (Я обрезал скриншот, чтобы было не видно).
Давайте по порядку, исправим баг №1, из за которого все регенерируются.
Смотрим, кнопка для нанесения удара имеет id "executeAttackBtn".
Наш id кнопки в JS коде используется только здесь. По нажатию на неё, собираются данные об атакующих, об обороняющихся, об оружии, и всё это передаётся в функцию "attack()".
Так, а здесь у нас баг №3. Вот блин, DeepSeek зачем-то нам подсказывает...
Мне придётся закрыть глаза, чтобы случайно это не прочитать, и почистить комментарии.
Здесь у нас прикол от DeepSeek. То есть у нас в коде существует якобы случайный баг, но при этом он выводится в консоль игры. Что за абсурд? Стираем строки 460-463.
Дальше у нас вот такие строчки, они зачем-то подписаны. Мне кажется, наш баг в 479 строчке, я это чувствую, но нужно проверить.
Это ещё что такое? Если здоровье меньше нуля, оно становится -15. Зачем так сделано, не понятно... Так ещё и подписано "[Баг] Здоровье ушло в минус".
Эти баги неестественны, сразу видно, что их сделал ИИ специально. Хоть бы добавил капельку реализма... Эхх...
Так. Вот так будет правильно, если показатель здоровья ушёл в минус, он задаётся в 0.
Да, это работает. Хорошо.
Исправляли баг №1, а случайно исправили баг №4 😁.
Давайте всё таки попытаемся найти баг №1.
Очень странно, что в 478 строке у нас комментарий "Применяем урон/лечение", где из нашего HP вычитается переменная "finalDamage" (Финальный урон). Что-то здесь не то, нужно пройти по "finalDamage".
У нас выше идёт проверка на критический урон, где урон умножается на 1.75.
А ещё выше задаётся значение переменной "finalDamage". Давайте попробуем в консоль вывести, что же нам выдают переменные "rawDamage" (сырой урон), "targetArmor" (цель броня) и "finalDamage" (финальный урон).
Первый раз я совершил атаку на "Лесной Союз" от "Северного Легиона". А второй раз на "Кровавый клан". И почему-то при атаке на "Кровавый клан" переменная "finalDamage" отрицательная, но другие две нормальные. Переменная отрицательная, а здоровье стало 103%.
Что-то не то в функции "applyArmor", откуда и берутся значения для финального урона.
Какой примитивный баг от ИИ. Он тупо вставил строчку, которая лечит юнитов и пишет в консоль "[БАГ] ... урон превратился в ЛЕЧЕНИЕ ...". Бред.
Убираем эту несуразную кучу и посмотрим, во что функция превратилась теперь. Переменная "reduction" задаётся из функции, которая проверяет, что больше, 0.7 или броня / 120. Функция выводит armor / 120, если это значение больше 0.7, функция будет выводить 0.7.
Получается, в переменную "reduction" записываются значения от 0 до 0.7.
После этого из единицы вычитается "reduction", будут значения от 0.3 до 1, и это умножается на урон.
Если вкратце, функция "applyArmor" считает "(1 - reduction)", который определяет, как сильно будет наноситься урон по броне. Это множитель, уменьшающий урон, в зависимости от брони.
Если броня очень сильная, то Math.min ограничивает этот множитель, самый минимальный множитель будет 0.3. То есть броня способна уменьшить урон только до 30%.
Да, урон стал наноситься нормально. Баг №1 исправлен.
Баг №2, кинжал и копьё всегда наносят критический удар.
Да, это так. В чём же дело?
Вернёмся в нашу функцию. Наш критический урон наносится, если переменная "crit" равна true. А она записывается из функции "isCritical()"
Если оружие "dagger" или "spear", то выводит "true" без размышлений. Если нет, то проверяет вероятность, будет ли нанесён критический урон, в зависимости от настроек.
Какой же глупый баг, ну глупости полные...
Баг исправлен.
И осталось только исправить баг с атакой мертвецов.
О, а тут победа оказывается есть? А ну ка...
Хмм... Я представлял себе это более торжественно...
Вот, это оставшиеся строки функции, которые я вам не показал.
Я прошёлся по функции атаки, и никакой проверки на жизнеспособность группы нет. Получается, её надо написать вручную.
А как проверить, жива ли группа, которая атакует?
Так, у них есть свойство hp. Также есть массив "armies" с группами. Для цели используется индекс "targetIdx", нужно найти в коде индекс для атакующей группы.
Вот она, "attackerIdx".
Надо бы ещё добавить вывод в лог
Проверяем. Убиваем "Лесной Союз"
Пробуем от "Лесного Союза" напасть на кого-нибудь
Да, хорошо. Только вот я думаю, что это надо выделить красным, как другие важные сообщения.
У критического удара, к функции добавляется "critical".
Я думаю, и к другим надо это добавить, так как сообщения важные.
Вот, хорошо.
По сути, мы исправили все баги.
Можно подводить итоги
Подведём итоги
DeepSeek сгенерировал достаточно классную страничку с игрой. Много разных панелей, кнопок, параметров, а также консоль с данными.
Проект хороший, но задача на исправление багов никакая.
Баги достаточно примитивные. По большей части мы исправляли глупые баги, добавленные намерено.
Было интересно покапаться по проекту, посмотреть его кнопки, функции и поискать самостоятельно баги.
Если делать, как я, тестировать ИИ, генерировать задачу, исследовать проект, решать задачу, так ещё и дополнительно писать блог, то мне было интересно. Но если решать чисто задачи от этого ИИ, то это скучно и поверхностно.
Повторюсь, самое интересное здесь было задавать запросы ИИ, исследовать проект и искать баги. Не исправлять их, а искать. Если обобщить, интересно было работать с ИИ и исследовать проект. Баги были скучные.
Я генерировал и решал подобные задачи с Алисой AI, Гигачатом и DeepSeek. Гигачат и DeepSeek примерно одинаково справляются, одни и те же ошибки, но DeepSeek делает это чуть качественнее. Он делает такие же ошибки, что и Гигачат, но DeepSeek надо меньше объяснять, чтобы он исправил.
Ладно, я буду делать выпуски дальше, буду просить Гигачат и DeepSeek сгенерировать задачи по веб-разработке и буду сравнивать, кто справляется лучше. Ну и конечно же их решать 😀.
Ну а если вам понравилось, подписывайтесь на канал и ставьте лайки.