Быстрое раздумье дало такой вариант - точки у нас в формате (x,y) выбираем плоскость, по которой будем группировать плоскости , например y.
Группируем точки:
{
y1 : [ y1x1, y1x2, y1x3],
y2 : [ y2x1, y2x2],
y3 : [y3x1, y3x2, y3x3]
}
В вашем случае это будет
{
2 : [2, 3, 4],
3 : [2, 4],
4 : [2, 3, 4]
}
Теперь есть следующие правила - минимальный и максимальный элемент в массиве должны быть равны y1 и y3 соответственно: т.е. в каждом массиве (по индексу 2, 3 и 4) минимальный элемент будет равен 2, а максимальный 4. И еще одно правило - должно быть всего 3 y-ключа (2 по 3 элемента и 1 на 2 элемента). Думаю примерно мысль объяснил, но не претендую на верное решение