Ratibor, Вектор - направление движения. У вас может быть 4 выйгрышных вектора.
вертикаль, горизонт, и 2 диагонали. Алгоритм примерно такой
1) Размечаем сетку рядами. типа первый ряд 1-2-3, второй 3-4-5 тд
2) Собираем все отмеченные элементы пользователя в массив, типа [5,9,1] или [1,4,8,3] и тп;
3) Сортируем по возрастанию
4) Генерируем возможные комбинации. типа из [1,3,4,8] может быть
[1,3,4],[1,4,8],[3,4,8],[1,3,8] - ну вроде все.
5) прогоняем каждую комбинацию через чекер вектора.
- горизонт это все элементы линейно растут на 1 [1,2,3]
- вертикаль это все элементы линейно растут на ширину сетки [1,4,7]
- диагональ это все элементы линейно растут на ширину сетки +-1(в зависимости от направления)
И получаете возможную комбинацию выигрыша.
Это даст возможность создать любое кол-во элементов в сетке
frontendo, А то что операция асинхронная, не смущает? Может и 1М/сек, главное чтобы нода раскидала. Заявление автора может быть на 8 ядрах к примеру с 128гб оперативы.