Конкурс «КИО 2021»
Узоры (1 уровень)

a fishВы когда-нибудь рисовали узоры из одной фигуры так, чтобы заполнить ею полностью лист бумаги? В этой задаче вам нужно не просто придумать фигуру, с помощью которой можно зарисовать всю плоскость бесконечным узором без наложений и пропусков, а придумать одну такую фигуру, с помощью которой можно нарисовать как можно больше разнообразных узоров.

Изменяйте фигуру, и программа сразу нарисует вам все узоры, которые можно из нее составить. Некоторые узоры кажутся похожими, тогда они считаются как один узор. В узоре учитывается весь рисунок фигуры с морским чудищем внутри. Поэтому даже из квадратов можно составить много разных узоров, поворачивая их разными способами. Чудище внутри фигуры демонстрирует, как именно ее повернули или отразили.

Старайтесь создавать фигуру из большего количества точек. Если две фигуры генерируют одинаковое количество узоров, то лучшей будет фигура с большим количеством точек. И старайтесь не делать фигуру симметричной. Приоритет всегда отдается несимметричным фигурам, любая симметричная фигура проиграет любой несимметричной. Симметрии (центры поворота или оси симметрии) рисуются сразу поверх фигуры.

Помощь

Чтобы переместить точку, наведите на нее мышь, удерживайте левую кнопку и тащите. Чтобы добавить точку, наведите мышь на сторону фигуры и нажмите левую кнопку мыши. Чтобы удалить точку, перетащите ее в одну из соседних по стороне точек.

Вы не сможете сделать фигуру менее,чем из трех точек. Стороны фигуры не должны пересекаться, и фигура не может быть c пустой внутренностью.

Немного подробностей о построении узоров. Программа пытается построить все возможные узоры из фигуры. В качестве узоров рассматриваются только «регулярные узоры», то есть те, которые переходят в себя при совмещении двух копий фигуры. Именно, если взять любую фигуру узора и переместить ее в положение любой другой фигуры, то весь узор тоже должен наложиться сам на себя.

Узоров иногда бывает бесконечно много, например, из квадрата можно построить квадратные сетки и произвольно двигать ее горизонтальные слои. В программе вычисляются только те узоры, в которых к первой фигуре соседние присоединяются в линиях сетки. Поэтому, чем больше на сторонах фигуры линий сетки, тем дольше вычисляются узоры.

Какие узоры считаются похожими? Основное правило, что кусочки похожих узоров можно передвинуть без поворотов и отражений друг на друга. Например, если один узор состоит из фигурки и ее поворота и второй узор состоит из фигурки и такого же ее поворота, то такие узоры будут похожи. Или, например, если узоры состоят из копии фигуры без поворотов и отражений, то они тоже будут считаться похожими.

Дополнительно для похожести проверяется тип сетки. Если пройтись по фигуре по часовой стрелке, начиная с фиксированной точки, и в каждой точке, где сходятся несколько фигур, записать, сколько фигур там сходится, получится набор чисел, называемый типом сетки. Например, в квадратной сетке это будет 4,4,4,4. А в сетке из правильных шестиугольников получится 3,3,3,3,3,3. Чтобы узоры были похожими, они должны иметь одинаковый тип сетки.

Для ускорения работы программы, программа не отображает больше 20 похожих узоров.