Удобный и полезный способ представления топологических поверхностей с помощью фундаментального многоугольника . Каждая сторона многоугольника совпадает с другой стороной и может быть параллельной или антипараллельной. Например, вот фундаментальный многоугольник тора :
Чтобы понять, почему это тор, мы можем представить, что наш многоугольник - это лист бумаги. Чтобы получить правильную поверхность, мы хотим согнуть нашу бумагу так, чтобы соответствующие ребра совпали со своими стрелками, идущими одинаковым образом. Для нашего примера тора мы можем начать, свернув бумагу в цилиндр так, чтобы два синих края (помеченные буквой b) были соединены. Теперь возьмем нашу трубку и согнем ее так, чтобы два красных края (обозначенных буквой а) соединились друг с другом. Мы должны иметь форму пончика, также называемого тор.
Это может стать немного сложнее. Если вы попытаетесь сделать то же самое со следующим многоугольником, где одно из ребер идет в противоположном направлении:
Вы можете оказаться в беде. Это потому, что этот многоугольник представляет бутылку Кляйна, которая не может быть встроена в трех измерениях. Вот диаграмма из Википедии, показывающая, как вы можете сложить этот многоугольник в бутылку Кляйна:
Как вы уже догадались, задача здесь состоит в том, чтобы взять фундаментальный многоугольник и определить, какая это поверхность. Для четырехсторонних полигонов (единственные поверхности, с которыми вам придется обращаться) есть 4 разных поверхности.
Они есть
торус
Бутылка Кляйна
сфера
Проективная плоскость
Теперь это не обработка изображения, поэтому я не ожидаю, что вы возьмете изображение в качестве ввода, вместо этого мы будем использовать удобную запись для представления основного многоугольника. Вы, возможно, заметили в двух приведенных выше примерах, что я назвал соответствующие ребра одной и той же буквой (или a или b), и что я дал скрученному ребру дополнительную метку, чтобы показать его скрученный. Если мы начнем с верхнего края и запишем метку для каждого края по часовой стрелке, мы можем получить обозначение, представляющее каждый фундаментальный многоугольник.
Например, предоставленный Торус станет abab, а Бутылка Кляйна станет ab - ab . Для нашей задачи мы сделаем это еще проще, вместо того, чтобы пометить скрученные края отрицательным, мы вместо этого сделаем эти буквы заглавными.
задача
По заданной строке определите, представляет ли она фундаментальный многоугольник, и выведите значение, соответствующее ее правильной поверхности. Вам не нужно точно называть поверхности, вам просто нужно 4 выходных различных значения, каждое из которых представляет одну из 4 поверхностей, а пятое значение представляет неправильный ввод. Все основные случаи описаны в разделе « Простые тесты », каждый автомобиль будет изоморфен одному из или недействителен.
правила
Стороны не всегда будут помечены буквами a и b, но они всегда будут помечены буквами.
Допустимый ввод будет состоять из 4 букв, двух одного типа и двух другого. Вы должны всегда выводить правильную поверхность для правильного ввода.
Вы должны отклонить (не выводить ни одно из 4 значений, представляющих поверхности) неверный ввод. Вы можете сделать что-нибудь, отклоняя ввод, если он отличается от 4 поверхностей
Это код-гольф, поэтому цель состоит в том, чтобы минимизировать количество байтов в исходном коде.
тесты
Простые тесты
abab Torus
abAb Klein Bottle
abaB Klein Bottle
abAB Projective Plane
aabb Klein Bottle
aAbb Projective Plane
aabB Projective Plane
aAbB Sphere
abba Klein Bottle
abBa Projective Plane
abbA Projective Plane
abBA Sphere
Хитрые тесты
ABAB Torus
acAc Klein Bottle
Emme Projective Plane
zxXZ Sphere
aaab Bad input
abca Bad input
abbaa Bad input
ab1a Bad input
abab
- это пример в первом абзаце, вы можете найти там объяснение. Вот изображение, показывающее, почему aabb
это то же самое, abAb
что и бутылка Кляйна.
abab
тор иaabb
бутылка Кляйна?