Uma maneira conveniente e útil de representar superfícies topológicas é com um polígono fundamental . Cada lado de um polígono corresponde a outro lado e pode ser paralelo ou anti-paralelo. Por exemplo, o aqui é o polígono fundamental de um toro :
Para descobrir por que esse é um toro, poderíamos imaginar nosso polígono sendo uma folha de papel. Para criar a superfície adequada, queremos dobrar o papel para que as bordas correspondentes se alinhem com as setas seguindo o mesmo caminho. Para o nosso exemplo de toro, podemos começar enrolando o papel em um cilindro para que as duas bordas azuis (rotuladas b) sejam conectadas. Agora pegamos nosso tubo e dobramos para que as duas bordas vermelhas (rotuladas a) se conectem. Deveríamos ter uma forma de rosca, também chamada de toro.
Isso pode ficar um pouco mais complicado. Se você tentar fazer o mesmo com o polígono a seguir, onde uma das arestas está indo na direção oposta:
você pode encontrar-se em algum problema. Isso ocorre porque esse polígono representa a garrafa Klein que não pode ser incorporada em três dimensões. Aqui está um diagrama da wikipedia mostrando como você pode dobrar esse polígono em uma garrafa de Klein:
Como você deve ter adivinhado, a tarefa aqui é pegar um polígono fundamental e determinar qual é a superfície. Para polígonos de quatro lados (as únicas superfícies que você precisará manusear), existem 4 superfícies diferentes.
Eles são
Toro
Klein Bottle
Esfera
Plano projetivo
Agora, como este não é o processamento de imagens , não espero que você tire uma imagem como entrada. Em vez disso, usaremos uma notação conveniente para representar o polígono fundamental. Você deve ter notado nos dois exemplos acima que eu nomeei as arestas correspondentes com a mesma letra (a ou b), e que dei à borda torcida uma marca adicional para mostrar sua torção. Se começarmos pela borda superior e escrevermos o rótulo de cada borda à medida que avançamos no sentido horário, podemos obter uma notação que representa cada polígono fundamental.
Por exemplo, o Torus fornecido se tornaria abab e a Garrafa Klein se tornaria ab - ab . Para o nosso desafio, vamos torná-lo ainda mais simples. Em vez de marcar as bordas retorcidas com um negativo, em vez disso, tornaremos essas letras maiúsculas.
Tarefa
Dada uma sequência, determine se ela representa um polígono fundamental e gera um valor correspondente à superfície adequada. Você não precisa nomear as superfícies exatamente, você só precisa de 4 valores distintos de saída, cada um representando uma das 4 superfícies com um quinto valor representando entrada incorreta. Todos os casos básicos são abordados na seção Testes simples , todos os carros serão isomórficos para um dos ou inválidos.
Regras
Os lados nem sempre serão rotulados com aeb, mas sempre com letras.
A entrada válida será composta por 4 letras, duas de um tipo e duas de outro. Você sempre deve produzir a superfície correta para entrada válida.
Você deve rejeitar (não gerar nenhum dos 4 valores que representam superfícies) a entrada inválida. Você pode fazer qualquer coisa ao rejeitar uma entrada, desde que seja distinguível das 4 superfícies
Isso é código-golfe, portanto, o objetivo é minimizar o número de bytes no seu código-fonte.
Testes
Testes 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
Testes mais complicados
ABAB Torus
acAc Klein Bottle
Emme Projective Plane
zxXZ Sphere
aaab Bad input
abca Bad input
abbaa Bad input
ab1a Bad input
abab
é o exemplo no primeiro parágrafo, você pode procurar uma explicação aqui. Aqui está uma imagem mostrando por que aabb
é o mesmo abAb
que uma garrafa de Klein.
abab
um toro eaabb
uma garrafa de Klein?