Un modo conveniente e utile per rappresentare le superfici topologiche è con un poligono fondamentale . Ogni lato su un poligono corrisponde a un altro lato e può essere parallelo o anti-parallelo. Ad esempio il qui è il poligono fondamentale di un toro :
Per capire perché questo è un toro, possiamo immaginare che il nostro poligono sia un foglio di carta. Per rendere la superficie corretta vogliamo piegare la nostra carta in modo che i bordi corrispondenti si allineino con le loro frecce che procedano allo stesso modo. Per il nostro esempio di toro possiamo iniziare arrotolando la carta in un cilindro in modo che i due bordi blu (etichettati b) siano collegati. Ora prendiamo il nostro tubo e lo pieghiamo in modo che i due bordi rossi (etichettati a) si colleghino l'un l'altro. Dovremmo avere una forma a ciambella, chiamata anche toro.
Questo può diventare un po 'più complicato. Se provi a fare lo stesso con il seguente poligono in cui uno dei bordi sta andando nella direzione opposta:
potresti trovarti nei guai. Questo perché questo poligono rappresenta la bottiglia di Klein che non può essere inserita in tre dimensioni. Ecco un diagramma di Wikipedia che mostra come piegare questo poligono in una bottiglia di Klein:
Come avrai intuito, il compito qui è prendere un poligono fondamentale e determinare quale superficie è. Per i poligoni a quattro lati (le uniche superfici che ti sarà richiesto di gestire) ci sono 4 diverse superfici.
Loro sono
Torus
Bottiglia Klein
Sfera
Piano proiettivo
Ora non si tratta di elaborazione di immagini, quindi non mi aspetto che tu prenda un'immagine come input, invece useremo una notazione conveniente per rappresentare il poligono fondamentale. Potresti aver notato nei due esempi sopra che ho chiamato i bordi corrispondenti con la stessa lettera (o a o b) e che ho dato al bordo ritorto un segno aggiuntivo per mostrarne il contorto. Se iniziamo dal bordo superiore e scriviamo l'etichetta per ciascun bordo mentre procediamo in senso orario, possiamo ottenere una notazione che rappresenta ciascun poligono fondamentale.
Ad esempio il Torus fornito diventerebbe abab e la bottiglia di Klein diventerebbe ab - ab . Per la nostra sfida lo renderemo ancora più semplice, invece di contrassegnare i bordi contorti con un negativo, invece renderemo maiuscole quelle lettere.
Compito
Data una stringa, determina se rappresenta un poligono fondamentale e genera un valore corrispondente alla sua superficie corretta. Non è necessario nominare esattamente le superfici, sono necessari solo 4 valori distinti di output, ognuno dei quali rappresenta una delle 4 superfici con un quinto valore che rappresenta un input errato. Tutti i casi di base sono trattati nella sezione Test semplici , ogni auto sarà isomorfa rispetto a una o non valida.
Regole
I lati non saranno sempre etichettati con aeb, ma saranno sempre etichettati con lettere.
L'input valido sarà composto da 4 lettere, due di un tipo e due di un altro. È sempre necessario produrre la superficie corretta per un input valido.
È necessario rifiutare (non emettere nessuno dei 4 valori che rappresentano le superfici) input non valido. È possibile fare qualsiasi cosa quando si rifiuta un input, purché sia distinguibile dalle 4 superfici
Questo è code-golf, quindi l'obiettivo è ridurre al minimo il numero di byte nel codice sorgente.
test
Test semplici
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
Test più complicati
ABAB Torus
acAc Klein Bottle
Emme Projective Plane
zxXZ Sphere
aaab Bad input
abca Bad input
abbaa Bad input
ab1a Bad input
abab
è l'esempio nel primo paragrafo, puoi cercare una spiegazione lì. Ecco un'immagine che mostra perché aabb
è la stessa di abAb
una bottiglia di Klein.
abab
un toro eaabb
una bottiglia di Klein?