Зручний і корисний спосіб представлення топологічних поверхонь - це фундаментальний багатокутник . Кожна сторона на полігоні збігається з іншою стороною і може бути паралельною або антипаралельною. Наприклад, ось основний багатокутник тору :
Щоб зрозуміти, чому це торус, ми могли б уявити наш полігон як аркуш паперу. Щоб зробити належну поверхню, ми хочемо зігнути наш папір так, щоб відповідні краї вирівнювались стрілками так само. Для нашого прикладу тору ми можемо почати з прокручування паперу в циліндр, щоб два синіх ребра (з позначкою b) були з'єднані. Тепер беремо нашу трубочку і згинаємо її так, щоб два червоні краї (позначені а) з'єдналися один з одним. Ми повинні мати форму пончика, яку ще називають тором.
Це може стати трохи складніше. Якщо ви спробуєте зробити те ж саме з наступним багатокутником, коли один з ребер йде в зворотному напрямку:
ви можете опинитися в якійсь неприємності. Це тому, що цей багатокутник являє собою пляшку Кляйна, яку неможливо вбудувати у три виміри. Ось схема вікіпедії, яка показує, як можна скласти цей багатокутник у пляшку Кляйна:
Як ви, напевно, здогадалися, завдання тут - взяти фундаментальний багатокутник і визначити, яка це поверхня. Для чотирьох однобічних багатокутників (єдиних поверхонь, від яких вам потрібно буде обробити) є 4 різні поверхні.
Вони є
Торус
Кляйн пляшка
Сфера
Проективна площина
Тепер це не обробка зображень, тому я не сподіваюсь, що ви візьмете зображення як вхід, замість цього ми використаємо зручне позначення для представлення основного багатокутника. Можливо, ви помітили в двох вище прикладах, що я назвав відповідні краї з тією самою буквою (або a, або b), і що я дав скрученому краю додаткову позначку, щоб показати його скрученим. Якщо ми починаємо з верхнього краю і записуємо мітку для кожного краю, рухаючись за годинниковою стрілкою, ми можемо отримати позначення, що представляє кожен основний багатокутник.
Наприклад, став би наданий Торус ABAB і пляшки Клейна стане ABAB . Для нашого завдання ми зробимо це ще простіше, замість того, щоб позначити вивернуті краї негативом, замість цього ми зробимо великі літери.
Завдання
Даний рядок визначте, чи він є основним багатокутником, і виведіть значення, яке відповідає належній його поверхні. Вам не потрібно точно називати поверхні, вам просто потрібно 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
пляшка Клейна?