表示拓扑表面的一种方便且有用的方法是使用基本多边形。多边形的每一侧都与另一侧匹配,并且可以是平行的或反平行的。例如,这是圆环的基本多边形:
为了弄清楚为什么这是一个圆环,我们可以想象我们的多边形是一张纸。为了制作适当的表面,我们希望弯曲纸张,以使相应的边缘与箭头的方向相同。对于我们的圆环示例,我们可以从将纸卷成圆柱体开始,以便连接两个蓝色边缘(标记为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
abBa Projective Plane
abbA Projective Plane
abBA Sphere
技巧测试
ABAB Torus
acAc Klein Bottle
Emme Projective Plane
zxXZ Sphere
aaab Bad input
abca Bad input
abbaa Bad input
ab1a Bad input
abab
会有一个圆环和aabb
一个克莱因瓶?