Это, по сути, проблема в перечислительной комбинаторике, которая является искусством подсчета комбинаций вещей. Это красивый предмет, но, вероятно, нужно немного разогреться, прежде чем вы сможете оценить трюки ниндзя в приведенной вами ссылке.
С другой стороны, комментарии в ветке решений этой проблемы указывают на то, что многие решили проблему, используя метод грубой силы. Один из наиболее распространенных приемов заключается в том, чтобы взять все возможные комбинации трех линий на диаграмме и выяснить, дают ли они треугольник, который находится внутри самого большого треугольника.
Вы можете значительно сократить пространство поиска, заметив, что линии расположены в одном из шести направлений. Поскольку комбинация линий, включающая две параллельные линии, не приведет к треугольнику, вы можете перебирать тройки строк, чтобы каждая линия в тройке имела различное направление.
Учитывая три линии, вычислите их точки пересечения. У вас будет три возможности
1) линии совпадают - все они пересекаются в общей точке
2) две линии пересекаются в точке за пределами треугольника
3) все три точки пересечения различны, и все они находятся внутри внешнего треугольника
Просто посчитайте комбинации, удовлетворяющие условию (3), и все готово. Количество комбинаций линий, которые вы должны протестировать, равно O (n 3 ), что не является запретительным.
РЕДАКТИРОВАТЬ1: перечитывая ваш вопрос, у меня сложилось впечатление, что вы могли бы быть более заинтересованы в объяснении комбинаторического решения / формулы, чем в общих чертах. Если это так, скажите, и я удалю этот ответ. Но я бы также сказал, что вопрос в этом случае не подходит для этого сайта.
EDIT2: См. Также комбинаторное решение Билла Дейли и других . Математически он немного мягче, чем другой.