Моё решение задачи 134
Краткое условие: назовём порождающим для двух последовательных простых \(p_1 < p_2\) наименьшее натуральное число, что оно закачивается на \(p_1\) и при этом делится на \(p_2\). Необходимо найти сумму порождающих для всех \(p_1 \in \left[ 5; 10^6 \right]\)
Authors on Блог 529
- Алексей Лобанов (9)
Блог 529
Project Euler и остальное
Как я шахматного бота писал
Как я проверял шахматное приложение на “ботоустойчивость”.
CrossGen v1.0
Читая хабр, случайно натолкнулся на идею сделать программу, которая по заданной кроссвордной сетке находит способ её заполнить. В этом посте вкратце напишу про моё решение и первую версию приложения.
Ещё одно вычисление выражений
На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои силы.
Блог 529
Project Euler и остальное
Моё решение задачи 134
Краткое условие: назовём порождающим для двух последовательных простых \(p_1 < p_2\) наименьшее натуральное число, что оно закачивается на \(p_1\) и при этом делится на \(p_2\). Необходимо найти сумму порождающих для всех \(p_1 \in \left[ 5; 10^6 \right]\)
\ No newline at end of file diff --git a/posts/eksport-partii-s-lichess/index.html.gz b/posts/eksport-partii-s-lichess/index.html.gz new file mode 100644 index 0000000..7e49a56 Binary files /dev/null and b/posts/eksport-partii-s-lichess/index.html.gz differ diff --git a/posts/kak-ia-shakhmatnogo-bota-pisal/index.html b/posts/kak-ia-shakhmatnogo-bota-pisal/index.html index f555580..ce6b898 100644 --- a/posts/kak-ia-shakhmatnogo-bota-pisal/index.html +++ b/posts/kak-ia-shakhmatnogo-bota-pisal/index.html @@ -1,7 +1,7 @@Блог 529
Project Euler и остальное
Экспорт партий с Lichess
Одну партию с Lichess скачать довольно просто, это можно сделать на странице с самой игрой. Скачать все игры тоже несложно, для этого есть специальный раздел.
Если же хочется скачать свои партии, то я нашёл лишь одно решение. Последний коммит был сделан 2 года назад, также оно не учитывает ограничения API, и больше ~2000 партий, за раз скачать не получится.
Моей целью было написание альтернативы, которая бы работала быстрее и работала корректно.
Проблема формата решена довольно просто: API отдаёт PGN, значит его поддержка уже есть. Но это плохой формат для хранения и обработки. Поэтому нужно было выбрать что-то ещё.
Существует, практически, только Scid, если вы хотите хранить свои шахматные партии, используя открытый софт. В его дистрибутиве уже есть необходимые утилиты для конвертации pgn в свой формат.
Репозиторий здесь, а здесь можно скачать файлы сразу.
Возможности
- Многопоточность
- Сохранение как в PGN, так и в формат Scid
- Для работы необходим только Python
- Работает при любом числе партий
Установка
pip install grequests +Запуск
python lichess.py -n hippo23 -t pgn -o hippo23.pgn --threads 6 +Здесь
hippo23мой ник, аpgnформат сохранения (доступен такжеscid).
Как я шахматного бота писал Блог 529
Project Euler и остальное
Как я шахматного бота писал
Лет 5 назад я достаточно активно играл в “живые” шахматы. Потом времени на это стало не хватать и постепенно перешёл на редкие партии в онлайне. Сейчас для игры я использую одно из самых популярных приложений вк. Это проще, чем использовать, к примеру, FICS. Предмет обсуждения появился из-за того, что я как-то раз встретился с соперником, который на все ходы потратил порядка 10 секунд, при этом не допустив значимых ошибок. Тогда я решил написать своего бота, чтобы узнать что с ним будет и столкнусь ли я с какими-нибудь подводными камнями.
Целью было максимально быстрое написание максимально простого решения. Поэтому от разбора протокола я сразу отказался, тем более у меня не было подобного опыта ранее. Была мысль работать с FICS (у меня есть библиотека для работы с их протоколом), но поскольку я там не играю, то и результаты были бы не так интересны, во всяком случае, для меня. Таким образом, я писал простого кликера для приложения вк.
Изначально хотелось найти доску и определить положения всех фигур, это было бы достаточно универсально, хотя и привязало бы меня к OpenCV. Тем не менее, решил не усложнять: можно определять только последний ход, а это можно сделать, проверяя цвет только одного пикселя.
В самом скрипте около 200 строк на python. Очень сильно помогла библиотека chess, которая взяла на себя общение с движком (я использовал stockfish), проверку на допустимые ходы и определение мата. Некоторое время я уделил тому, чтобы сделать бота максимально похожим на человека, чтобы было невозможно выявить, что это бот полностью автоматическими средствами. По пунктам:
- Клик по полю в случайном месте, с распределением по Гауссу, центр которого не совпадает с центром клетки
- Случайное время хода, длительность которого распределена по Гауссу, причём средняя длительность хода изменяется, в зависимости от номера текущего хода.
- Прокладываются дополнительные точки, с распределением по Гауссу, при перемещении курсора от точки к точке.
По факту, всё это было лишним, бан получить не удалось даже при простом клике из начальной точки в конечную.
Примеры работы скрипта можно посмотреть тут и тут, анализы двух сыгранных игр лежат тут и тут (оппонент имеет рейтинг около 2100).
На момент публикации аккаунт вполне жив. Рейтинг достиг некоторого потолка (около 2200), после которого найти игроков примерно равного рейтинга, не являющихся ботами, очень сложно. Сражаться же с ботами сильно сложнее, такую цель я не ставил. Интересно, хоть и ожидаемо, что при наборе рейтинга было достаточно личностей, для которых возможность того, что их нагло обманули, и они играли с ботом была столь неприятна, что они не могли сдерживаться. Например:

p.s. Уже после создания рабочей версии от одного из оппонентов узнал про lichess.org. Это отличный ресурс на котором кроме, собственно, платформы для игры в шахматы (поддерживается большое количество их вариантов), есть тренировки по дебютам, анализ игр. Самое интересное — ресурс полностью открытый, все исходники есть на github.
В процессе подготовки данного материала узнал про InternetChessKiller, который делает, фактически, тоже самое, что и мой скрипт, но без привязки к какой-то одной игровой площадке. Исходники старых версий можно найти, например, в этом репозитории.
p.p.s. Боты на серверах, предназначенных для людей, играющие в игры, которые предназначены для людей очень сильно мешают людям. Тем не менее, проверять, насколько сильно они мешают не нужно!
Блог 529
Project Euler и остальное
Как я шахматного бота писал
Как я проверял шахматное приложение на “ботоустойчивость”.
Page 1 / 1Блог 529
Project Euler и остальное
Как я шахматного бота писал
Как я проверял шахматное приложение на “ботоустойчивость”.
CrossGen v1.0
Читая хабр, случайно натолкнулся на идею сделать программу, которая по заданной кроссвордной сетке находит способ её заполнить. В этом посте вкратце напишу про моё решение и первую версию приложения.
Ещё одно вычисление выражений
На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои силы.
Page 1 / 1Блог 529
Project Euler и остальное
Как я шахматного бота писал
Как я проверял шахматное приложение на “ботоустойчивость”.
Page 1 / 1