Решалка головоломки "Аквариумы"
Недавно я стал довольно много играть во всякие головоломки с этого и связанных сайтов. Головоломки можно разбить на 3 условных категории. В первой я достаточно быстро нашел набор локальных паттернов, и после этого решение ищется легко, практически машинально. Вторая группа уже посложнее: паттерны не очень локальные, и надо смотреть на взаимосвязи нескольких строк или столбцов. Иногда там еще и очень мало корректных следующих шагов, а найти их тяжело. Наконец, третья категория: в ней приходится опускаться до поиска с возвратом (aka backtracking), потому что не ясно, есть ли способ получше.
В какой-то момент для головоломки из последней категории я решил попросить у ChatGPT подсказку. В ответ он мне выдал лабуду, которая противоречит правилам и самой себе. Я парой запросов пытался добиться чего-то более адекватного, но это было бесполезно. Позже я попробовал Claude. Он пыхтел 20 минут, но все-таки выдал подсказку, которую можно было использовать.
И я навайбкодил (прости господи) приложение для решения головоломки (скриншот → подсказка). Опус 4.8 выдал первый результат через час (1 промпт + пара отвеченных вопросов). Я специально выбрал стек технологий, с которым не знаком (предлагался Kotlin/JS, Elm и Rust, но на них у меня есть (руками!) написанные приложения). Разумеется, первые результаты выглядели по-уродски и не работали. Были проблемы с обработкой скриншотов и цветовыми схемами. На их исправления понадобился еще час примерно.
Получившаяся решалка… выдавала тоже лабуду, на уровне ответов ChatGPT. Что странно, с учетом того, что клод в режиме чата справлялся. Позже я понял, что проблема все еще в обработке изображений. Мне даже пришлось самому печатать тестовые данные! Но даже этого было недостаточно. Все еще оставались проблемы с цветовыми схемами. Я временно на это забил и сфокусировался на логике.
Вскоре я нашел пример, который не решался набором правил. К сожалению, пришлось разрешить использовать поиск с возвратом. Потратил весьма приличное время на тестирование и улучшение подсказок, но в итоге все заработало. К сожалению, агент довольно быстро дошел до состояния, когда он думает, что проблема исправлена, но она еще есть. Я увлекся и не сразу осознал, что надо было его заставить на все писать тесты. Другой проблемой был Firefox и его функции безопасности с canvas, но после нескольких отладочных сборок и это починилось. А попутно и проблемы с обработкой скриншотов сошли на нет.
Как и ожидалось, отладка заняла существенно больше времени, чем первый MVP. Несмотря на то, что клод делал основную работу и все заняло больше итераций, чем я ожидал, мне все равно нравится результат. И я ощущаю, что что-то разработал, несмотря на опасения об обратном. Наконец, я стал решать эти головоломки лучше (абсолютно бесполезный навык).
MVP был на грани размера контекста — 99.9% от миллиона токенов (но потом сжал его, конечно). Некоторый код я посмотрел наискосок и совсем не впечатлился, ReScript меня никак не зацепил.
Если интересно, попробовать можно на http://localhost:5050 тут.