2
那是谁的多边形?
表示拓扑表面的一种方便且有用的方法是使用基本多边形。多边形的每一侧都与另一侧匹配,并且可以是平行的或反平行的。例如,这是圆环的基本多边形: 为了弄清楚为什么这是一个圆环,我们可以想象我们的多边形是一张纸。为了制作适当的表面,我们希望弯曲纸张,以使相应的边缘与箭头的方向相同。对于我们的圆环示例,我们可以从将纸卷成圆柱体开始,以便连接两个蓝色边缘(标记为b)。现在,我们将试管弯曲并将其两个红色边缘(标记为a)彼此连接。我们应该有一个甜甜圈形状,也称为圆环形状。 这可能会有点棘手。如果您尝试对以下多边形进行相同处理,则其中一个边沿相反的方向移动: 您可能会遇到麻烦。这是因为此多边形代表的Klein瓶子无法嵌入三个维度。这是维基百科的图表,显示了如何将这个多边形折叠成Klein瓶子: 您可能已经猜到了,这里的任务是获取基本多边形并确定其为哪个表面。对于四个面的多边形(您将需要处理的唯一曲面),有4个不同的曲面。 他们是 圆环面 克莱因瓶 球 投射平面 现在不是 图像处理,因此我不希望您将图像作为输入,而是使用方便的符号来表示基本多边形。您可能已经注意到,在上面的两个示例中,我用相同的字母(a或b)命名了相应的边,并且给扭曲的边附加了一个标记以显示其扭曲。如果我们从上边缘开始并沿顺时针方向写下每个边缘的标签,我们将得到一个表示每个基本多边形的符号。 例如,提供的Torus将变为abab,而Klein瓶将变为ab - ab。对于我们的挑战,我们将使其变得更加简单,而不是用负号标记扭曲的边缘,而改为将那些字母大写。 任务 给定一个字符串,确定它是否代表基本多边形,并输出一个与其正确表面相对应的值。您无需精确命名表面,只需要4个输出不同的值即可,每个值代表4个表面之一,第5个值代表不正确的输入。所有基本案例都包含在“ 简单测试”中部分介绍,每辆车将同构或无效。 规则 侧面将不会总是用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 …