วิธีที่สะดวกและมีประโยชน์เพื่อเป็นตัวแทนของพื้นผิวทอพอโลยีอยู่กับรูปหลายเหลี่ยมพื้นฐาน แต่ละด้านของรูปหลายเหลี่ยมจับคู่กับอีกด้านหนึ่งและสามารถเป็นแบบขนานหรือแบบขนาน เช่นนี่คือรูปหลายเหลี่ยมพื้นฐานของพรู :
เพื่อหาสาเหตุว่าทำไมมันถึงเป็นพรูเราสามารถจินตนาการว่ารูปหลายเหลี่ยมของเราเป็นแผ่นกระดาษ ในการสร้างพื้นผิวที่เหมาะสมเราต้องการดัดกระดาษของเราเพื่อให้ขอบที่สอดคล้องกันเรียงกันกับลูกศรของมันในลักษณะเดียวกัน สำหรับตัวอย่างของพรูเราสามารถเริ่มต้นด้วยการกลิ้งกระดาษเป็นทรงกระบอกเพื่อให้ขอบสีฟ้าทั้งสอง (ป้ายชื่อ b) เชื่อมต่อกัน ตอนนี้เราเอาหลอดของเราแล้วงอเพื่อให้ทั้งสองขอบสีแดง (ป้าย a) เชื่อมต่อซึ่งกันและกัน เราควรมีรูปโดนัทหรือที่เรียกว่าพรู
นี่อาจเป็นเรื่องหลอกลวง หากคุณพยายามทำเช่นเดียวกันกับรูปหลายเหลี่ยมต่อไปนี้โดยที่หนึ่งในขอบนั้นไปในทิศทางตรงกันข้าม:
คุณอาจพบว่าตัวเองมีปัญหา นี่เป็นเพราะรูปหลายเหลี่ยมนี้แสดงถึงขวด Kleinซึ่งไม่สามารถฝังในสามมิติ นี่คือแผนภาพจากวิกิพีเดียที่แสดงว่าคุณสามารถพับรูปหลายเหลี่ยมนี้เป็นขวด Klein ได้อย่างไร:
ในขณะที่คุณอาจเดาได้ว่างานที่นี่คือการใช้รูปหลายเหลี่ยมพื้นฐานและกำหนดพื้นผิวมัน สำหรับรูปหลายเหลี่ยมสี่เหลี่ยม (พื้นผิวเดียวที่คุณจะต้องใช้ในการจัดการ) มีพื้นผิวที่แตกต่างกัน 4 แบบ
พวกเขาเป็น
ฐานรองดอก
ขวดไคลน์
รูปทรงกลม
ระนาบ Projective
ตอนนี้นี่ไม่ใช่การประมวลผลภาพดังนั้นฉันไม่ได้คาดหวังให้คุณถ่ายภาพเป็นอินพุทแทนเราจะใช้สัญกรณ์ที่สะดวกในการแสดงรูปหลายเหลี่ยมพื้นฐาน คุณอาจสังเกตเห็นในสองตัวอย่างข้างต้นว่าฉันตั้งชื่อขอบที่สอดคล้องกันด้วยตัวอักษรเดียวกัน (ทั้ง a หรือ b) และฉันให้ขอบบิดเป็นเครื่องหมายเพิ่มเติมเพื่อแสดงการบิดของมัน หากเราเริ่มที่ขอบด้านบนและเขียนฉลากสำหรับแต่ละขอบตามเข็มนาฬิกาเราจะได้สัญกรณ์ที่แสดงถึงรูปหลายเหลี่ยมพื้นฐานแต่ละอัน
ตัวอย่างเช่น Torus ให้จะกลายเป็นAbabและขวดไคลน์จะกลายเป็นAbab สำหรับความท้าทายของเราเราจะทำให้มันง่ายยิ่งขึ้นแทนที่จะทำเครื่องหมายขอบที่บิดเป็นลบเราจะทำให้ตัวอักษรเหล่านั้นเป็นตัวพิมพ์ใหญ่แทน
งาน
รับสายกำหนดว่ามันหมายถึงรูปหลายเหลี่ยมพื้นฐานและการส่งออกค่าที่สอดคล้องกับพื้นผิวที่เหมาะสมของมันคือ คุณไม่จำเป็นต้องตั้งชื่อพื้นผิวให้ถูกต้องคุณเพียงแค่ต้องการค่าเอาต์พุตที่แตกต่างกัน 4 ค่าแต่ละอันแสดงถึงหนึ่งใน 4 พื้นผิวที่มีค่าที่ห้าแสดงถึงอินพุตที่ไม่เหมาะสม กรณีพื้นฐานทั้งหมดได้รับการกล่าวถึงในส่วนการทดสอบอย่างง่ายรถทุกคันจะมีความผิดปกติเพียงอย่างใดอย่างหนึ่งหรือไม่ถูกต้อง
กฎระเบียบ
ด้านจะไม่ถูกติดป้ายด้วย a และ b เสมอไป แต่จะถูกติดป้ายด้วยตัวอักษรเสมอ
อินพุตที่ถูกต้องจะประกอบด้วย 4 ตัวอักษรสองประเภทหนึ่งและอีกสองประเภท คุณจะต้องส่งออกพื้นผิวที่ถูกต้องสำหรับการป้อนข้อมูลที่ถูกต้อง
คุณควรปฏิเสธ (ไม่ส่งออกใด ๆ ของ 4 ค่าที่แสดงถึงพื้นผิว) อินพุตที่ไม่ถูกต้อง คุณสามารถทำอะไรก็ได้เมื่อปฏิเสธอินพุตตราบเท่าที่สามารถแยกแยะได้จาก 4 พื้นผิว
นี่คือโค้ดกอล์ฟดังนั้นเป้าหมายคือเพื่อลดจำนวนไบต์ในซอร์สโค้ดของคุณ
การทดสอบ
การทดสอบอย่างง่าย
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
Trickier Tests
ABAB Torus
acAc Klein Bottle
Emme Projective Plane
zxXZ Sphere
aaab Bad input
abca Bad input
abbaa Bad input
ab1a Bad input
abab
เป็นตัวอย่างในวรรคแรกคุณสามารถดูคำอธิบายได้ นี่คือภาพที่แสดงว่าทำไมถึงaabb
เป็นแบบเดียวกันกับabAb
ขวด Klein
abab
พรูและaabb
ขวด Klein?