Cara yang nyaman dan berguna untuk mewakili permukaan topologi adalah dengan poligon dasar . Setiap sisi pada poligon cocok dengan sisi lain dan dapat berupa paralel atau anti-paralel. Misalnya, ini adalah poligon dasar torus :
Untuk mengetahui mengapa ini adalah torus, kita bisa membayangkan poligon kita menjadi selembar kertas. Untuk membuat permukaan yang tepat, kami ingin menekuk kertas kami sehingga ujung-ujungnya yang sesuai sejajar dengan panahnya. Sebagai contoh torus kita, kita dapat mulai dengan menggulung kertas ke dalam silinder sehingga kedua tepi biru (berlabel b) terhubung. Sekarang kita mengambil tabung kita dan menekuknya sehingga kedua ujung merah (berlabel a) saling terhubung. Kita harus memiliki bentuk donat, juga disebut torus.
Ini bisa menjadi sedikit rumit. Jika Anda mencoba melakukan hal yang sama dengan poligon berikut ini di mana salah satu ujungnya berada di arah yang berlawanan:
Anda mungkin menemukan diri Anda dalam masalah. Ini karena poligon ini mewakili botol Klein yang tidak dapat disematkan dalam tiga dimensi. Berikut adalah diagram dari wikipedia yang menunjukkan bagaimana Anda dapat melipat poligon ini menjadi botol Klein:
Seperti yang sudah Anda tebak, tugas di sini adalah mengambil poligon dasar dan menentukan permukaannya. Untuk empat sisi poligon (satu-satunya permukaan yang Anda harus tangani) ada 4 permukaan yang berbeda.
Mereka
Torus
Botol Klein
Bola
Pesawat proyektif
Sekarang ini bukan pemrosesan gambar jadi saya tidak mengharapkan Anda untuk mengambil gambar sebagai input, sebaliknya kita akan menggunakan notasi yang mudah untuk mewakili poligon mendasar. Anda mungkin telah memperhatikan dalam dua contoh di atas bahwa saya menamai tepi yang sesuai dengan huruf yang sama (baik a atau b), dan bahwa saya memberi tanda bengkok sebagai tanda tambahan untuk menunjukkan bengkoknya. Jika kita mulai dari tepi atas dan menuliskan label untuk setiap sisi saat kita bergerak searah jarum jam kita bisa mendapatkan notasi yang mewakili setiap poligon mendasar.
Misalnya Torus yang disediakan akan menjadi abab dan Botol Klein akan menjadi ab - ab . Untuk tantangan kami, kami akan membuatnya lebih sederhana, alih-alih menandai ujung yang bengkok dengan negatif, kami malah akan membuat huruf-huruf tersebut menjadi huruf besar.
Tugas
Diberikan string menentukan apakah itu merupakan poligon dasar dan menghasilkan nilai yang sesuai dengan permukaan yang tepat itu. Anda tidak perlu memberi nama permukaan dengan tepat, Anda hanya perlu 4 nilai output yang berbeda, masing-masing mewakili salah satu dari 4 permukaan dengan nilai kelima mewakili input yang tidak tepat. Semua kasus dasar tercakup dalam bagian Tes Sederhana , setiap mobil akan isomorfik ke salah satu atau tidak valid.
Aturan
Sisi tidak akan selalu dilabeli dengan a dan b, tetapi mereka akan selalu dilabeli dengan huruf.
Masukan yang valid akan terdiri dari 4 huruf, dua dari satu jenis dan dua lainnya. Anda harus selalu menampilkan permukaan yang benar untuk input yang valid.
Anda harus menolak (bukan menampilkan salah satu dari 4 nilai yang mewakili permukaan) input yang tidak valid. Anda dapat melakukan apa saja saat menolak input, asalkan dapat dibedakan dari 4 permukaan
Ini adalah kode-golf sehingga tujuannya adalah untuk meminimalkan jumlah byte dalam kode sumber Anda.
Tes
Tes Sederhana
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
Tes yang lebih rumit
ABAB Torus
acAc Klein Bottle
Emme Projective Plane
zxXZ Sphere
aaab Bad input
abca Bad input
abbaa Bad input
ab1a Bad input
abab
adalah contoh di paragraf pertama, Anda bisa mencari penjelasan di sana. Berikut adalah gambar yang menunjukkan mengapa aabb
sama dengan abAb
botol Klein.
abab
torus danaabb
botol Klein?