На вход программе подаётся изображение игрового поля в крестики-нолики.
Необходимо обработать его и провести "победную" линию (перечёркивающую три одинаковых символа по правилам игры). Игровое поле может не содержать победителя (Тогда никакую линию проводить не надо). Гарантируется, что существует только одна победная линия.
Формат изображения -- png. Игровое поле находится в произвольном месте изображения, однако гарантируется, что все символы имеют одинаковый размер/толщину и центрированы относительно секторов. Линии игрового поля проведены параллельно краям изображения. Если алгоритм решения будет требовать определённого размера/толщины фигур -- отразите это в документации.
Всё решение находится в файле 1c-exam.ipnb
HTML версия в случае ошибок отображения 1c-exam.html
Для чтения изображения использована библиотека imageio
https://pypi.org/project/imageio/
В коде много описаний и комментариев для понятности
- Считать картинку из файла в формате
png
- Локализовать доску, найти направляющие
- Найти области каждой фигуры и определить, какого она типа:
- Крестик
- Нолик
- Пустота
- В полученном массиве 3 x 3 найти 3 повторяющиеся фигуры по вертикале, горизонтали или диагонали
- Определить координаты начала и конца линии
- Нарисовать линию на изображении
- Сохранить картинку
В репозитории лежит 2 примера
example1.png
->example1_result.png
example2.png
->example2_result.png
Действия по усовершенствованию функционала
- Заменить подсчёты суммы на
np.sum
, это повысит скорость в разы - Перенести в
.py
, разбить на несколько файлов и классов - Сделать консольный ввод-вывод с помощью
argparse
- Протестировать программу на большом количестве изображений.
Я бы использовал
pytest
Новичков Борис, МФТИ ФПМИ