Un moyen pratique et utile de représenter des surfaces topologiques est d'utiliser un polygone fondamental . Chaque côté d'un polygone correspond à un autre côté et peut être parallèle ou anti-parallèle. Par exemple, voici le polygone fondamental d'un tore :
Pour comprendre pourquoi il s'agit d'un tore, nous pourrions imaginer que notre polygone est une feuille de papier. Pour faire la bonne surface, nous voulons plier notre papier afin que les bords correspondants soient alignés avec leurs flèches dans le même sens. Pour notre exemple de tore, nous pouvons commencer par rouler le papier dans un cylindre afin que les deux bords bleus (étiquetés b) soient connectés. Maintenant, nous prenons notre tube et le plions de sorte que les deux bords rouges (étiquetés a) se connectent l'un à l'autre. Nous devrions avoir une forme de beignet, également appelée tore.
Cela peut devenir un peu plus délicat. Si vous essayez de faire de même avec le polygone suivant où l'une des arêtes va dans la direction opposée:
vous pourriez avoir des ennuis. En effet, ce polygone représente la bouteille de Klein qui ne peut pas être incrustée en trois dimensions. Voici un diagramme de wikipedia montrant comment vous pouvez plier ce polygone en une bouteille de Klein:
Comme vous l'avez peut-être deviné, la tâche consiste à prendre un polygone fondamental et à déterminer de quelle surface il s'agit. Pour les polygones à quatre côtés (les seules surfaces que vous devrez manipuler), il existe 4 surfaces différentes.
Elles sont
Torus
Bouteille Klein
Sphère
Plan projectif
Maintenant, ce n'est pas du traitement d'image, donc je ne m'attends pas à ce que vous preniez une image en entrée à la place, nous utiliserons une notation pratique pour représenter le polygone fondamental. Vous avez peut-être remarqué dans les deux exemples ci-dessus que j'ai nommé les bords correspondants avec la même lettre (a ou b), et que j'ai donné au bord torsadé une marque supplémentaire pour montrer son torsion. Si nous commençons au bord supérieur et notons l'étiquette pour chaque bord dans le sens des aiguilles d'une montre, nous pouvons obtenir une notation qui représente chaque polygone fondamental.
Par exemple, le Torus fourni deviendrait abab et la bouteille Klein deviendrait ab - ab . Pour notre défi, nous allons le rendre encore plus simple, au lieu de marquer les bords torsadés avec un négatif, nous allons plutôt mettre ces lettres en majuscule.
Tâche
Étant donné une chaîne, déterminez si elle représente un polygone fondamental et affichez une valeur correspondant à la surface appropriée de celui-ci. Vous n'avez pas besoin de nommer les surfaces exactement, vous avez juste besoin de 4 valeurs distinctes de sortie représentant chacune l'une des 4 surfaces avec une cinquième valeur représentant une entrée incorrecte. Tous les cas de base sont traités dans les tests simples section , chaque voiture sera isomorphe à l'un des ou invalide.
Règles
Les côtés ne seront pas toujours étiquetés avec a et b, mais ils seront toujours étiquetés avec des lettres.
Une entrée valide se composera de 4 lettres, deux d'un type et deux d'un autre. Vous devez toujours sortir la surface correcte pour une entrée valide.
Vous devez rejeter (ne pas afficher l'une des 4 valeurs représentant les surfaces) une entrée non valide. Vous pouvez faire n'importe quoi lorsque vous rejetez une entrée, tant qu'elle est distincte des 4 surfaces
C'est du code-golf donc l'objectif est de minimiser le nombre d'octets dans votre code source.
Les tests
Tests simples
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
Des tests plus difficiles
ABAB Torus
acAc Klein Bottle
Emme Projective Plane
zxXZ Sphere
aaab Bad input
abca Bad input
abbaa Bad input
ab1a Bad input
abab
est l'exemple du premier paragraphe, vous pouvez y chercher une explication. Voici une image montrant pourquoi aabb
est la même que celle abAb
qui est une bouteille Klein.
abab
un tore etaabb
une bouteille Klein?