Una forma conveniente y útil de representar superficies topológicas es con un polígono fundamental . Cada lado de un polígono coincide con otro lado y puede ser paralelo o antiparalelo. Por ejemplo, el aquí es el polígono fundamental de un toro :
Para descubrir por qué esto es un toro, podríamos imaginar que nuestro polígono es una hoja de papel. Para hacer la superficie adecuada, queremos doblar nuestro papel para que los bordes correspondientes se alineen con sus flechas en la misma dirección. Para nuestro ejemplo de toro, podemos comenzar enrollando el papel en un cilindro para que los dos bordes azules (etiquetados como b) estén conectados. Ahora tomamos nuestro tubo y lo doblamos para que los dos bordes rojos (etiquetados como a) se conecten entre sí. Deberíamos tener forma de rosquilla, también llamada toro.
Esto puede ser un poco más complicado. Si intenta hacer lo mismo con el siguiente polígono donde uno de los bordes va en la dirección opuesta:
puede que te encuentres en problemas. Esto se debe a que este polígono representa la botella de Klein que no se puede incrustar en tres dimensiones. Aquí hay un diagrama de Wikipedia que muestra cómo puedes doblar este polígono en una botella de Klein:
Como habrás adivinado, la tarea aquí es tomar un polígono fundamental y determinar qué superficie es. Para los polígonos de cuatro lados (las únicas superficies que deberá manejar) hay 4 superficies diferentes.
Son
Toro
Botella Klein
Esfera
Plano proyectivo
Ahora, esto no es procesamiento de imágenes, así que no espero que tomes una imagen como entrada, en su lugar usaremos una notación conveniente para representar el polígono fundamental. Es posible que haya notado en los dos ejemplos anteriores que nombré los bordes correspondientes con la misma letra (ya sea aob), y que le di al borde torcido una marca adicional para mostrar su torcido. Si comenzamos en el borde superior y escribimos la etiqueta para cada borde a medida que avanzamos, podemos obtener una notación que representa cada polígono fundamental.
Por ejemplo, el Torus proporcionado se convertiría en abab y la Botella Klein se convertiría en ab - ab . Para nuestro desafío, lo haremos aún más simple, en lugar de marcar los bordes retorcidos con un negativo, haremos que esas letras se pongan en mayúscula.
Tarea
Dada una cadena, determine si representa un polígono fundamental y genere un valor que corresponda a la superficie adecuada del mismo. No necesita nombrar las superficies exactamente, solo necesita 4 valores distintos de salida, cada uno de los cuales representa una de las 4 superficies con un quinto valor que representa una entrada incorrecta. Todos los casos básicos están cubiertos en la sección de Pruebas simples , cada automóvil será isomorfo a uno de los o inválido.
Reglas
Los lados no siempre se etiquetarán con a y b, pero siempre se etiquetarán con letras.
La entrada válida constará de 4 letras, dos de un tipo y dos de otro. Siempre debe generar la superficie correcta para una entrada válida.
Debe rechazar (no emitir ninguno de los 4 valores que representan superficies) entradas no válidas. Puede hacer cualquier cosa al rechazar una entrada, siempre que sea distinguible de las 4 superficies
Este es el código de golf, por lo que el objetivo es minimizar el número de bytes en su código fuente.
Pruebas
Pruebas 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
Pruebas más difíciles
ABAB Torus
acAc Klein Bottle
Emme Projective Plane
zxXZ Sphere
aaab Bad input
abca Bad input
abbaa Bad input
ab1a Bad input
abab
es el ejemplo en el primer párrafo, puede buscar una explicación. Aquí hay una imagen que muestra por qué aabb
es lo mismo abAb
que una botella de Klein.
abab
un toro yaabb
una botella de Klein?