Может быть, вы могли бы использовать некоторую хеш-функцию для идентификации конфигураций. Поскольку вам необходимо распознавать шаблоны, даже если они не находятся на одной и той же позиции на доске, этот хэш должен зависеть не от положения ячеек, а от того, как они организованы.
Если вы храните двумерную сетку в одномерном массиве, вам нужно будет найти первую заполненную ячейку и начать вычислять хеш отсюда до последней заполненной ячейки.
Ex:
-----------------
| | | | |
-----------------
| | X | X | |
-----------------
| | | X | |
-----------------
| | | | |
-----------------
----------------+---------------+---------------+----------------
| | | | | | X | X | | | | X | | | | | |
----------------+---------------+---------------+----------------
|_______________________|
|
Compute hash based on this part of the array
Однако есть случаи, когда это не сработает, например, когда рисунок смещен по линиям:
-----------------
| | | | X |
-----------------
| X | | | |
----------------- Different configuration in 2D.
| X | | | |
-----------------
| | | | |
-----------------
----------------+---------------+---------------+----------------
| | | | X | X | | | | X | | | | | | | |
----------------+---------------+---------------+----------------
|_______________________|
Seems similar in 1D
Так что вам понадобится способ разобраться с этими случаями. У меня пока нет решения, но я постараюсь что-то найти, если мой график это позволяет!
Подумав немного об этом, возможно, вы могли бы использовать два разных представления для сетки: одно, где строки добавляются в одномерный массив, и другое, где столбцы добавляются в одномерный массив. Хеш будет рассчитываться с этими двумя представлениями, и это (я думаю) решит проблему, вызванную выше.