给定结的陶氏符号及其交叉符号,请计算其括号多项式。
尽管存在更多的技术定义,但对于这一挑战,将结视为通过将绳的两端连接在一起而实际制成的东西就足够了。由于结存在于三维中,因此当我们将其绘制在纸上时,我们使用结图 -二维投影,其中的交叉点恰好是两条线,一上一下。
这里(b)和(c)是同一结的不同图。
我们如何在纸上表示一个结图?我们大多数人不是伦勃朗,因此我们依赖于Dowker表示法,其工作方式如下:
在结上选择任意起点。沿着结向任意方向移动,并从1开始对您遇到的交叉点进行编号,并进行以下修改:如果是偶数,并且您当前正在越过交叉点,则取消该偶数。最后,选择与1、3、5等对应的偶数。
让我们尝试一个例子:
在这个结上,我们选择“ 1”作为起点,然后继续向上和向右移动。每次我们去超过或下另一块绳,我们分配交叉点的下一个自然数。例如[3,-12]
,在图中,我们将与通过交叉的链对应的偶数取反。因此,此图将由表示[[1,6],[2,5],[3,-12],[-4,9],[7,8],[-10,11]]
。列出1、3、5、7等的伙伴给我们[6,-12,2,8,-4,-10]
。
这里有几件事要注意。首先,陶氏符号对于给定的结不是唯一的,因为我们可以选择任意的起点和方向。但是,有了这种表示法,就可以完全确定结的结构(从技术上讲,直到反映出其主要结的组成部分)。尽管并非所有的Dowker记号都可能形成结,但在此问题中,您可以假定输入代表实际的结。
为了避免打结之间产生歧义,并使挑战更容易解决,您还将获得一个交叉标志列表作为输入。
在正交叉处,下线从上线的角度转到左侧。在负数交叉处,它向右移动。请注意,倒车绕来绕去的结方向(即扭转双方在行和下行)不会改变交叉的迹象。在我们的示例中,交叉标志为[-1,-1,-1,1,-1,1]
。它们以与道克符号相同的顺序给出,即编号为1、3、5、7等的交叉点。
在上图中,可以将第一张图中具有轮廓的交叉形式转换为第二张图(也称为正平滑)或第三张图(负平滑)。
感到困惑了吗?让我们做一个例子,尝试找到()的方括号多项式(注:这是两个连接在一起的结。这种图在此挑战中将不是潜在的输入,因为输入将只是单个结,但可能显示为算法的中间结果。)
我们首先使用规则3
我们在两个新结上再次使用规则3
我们用这四个新的结代替第一个方程。
将规则1和2应用于这4条告诉我们
所以,这告诉我们
恭喜您完成了结理论的简介!
输入值
两张清单:
道克符号,例如
[6,-12,2,8,-4,-10]
。交叉点的编号必须从1开始。相应的奇数[1,3,5,7,...]
是隐式的,不能作为输入提供。与道克符号对应的交叉口的符号(
1
/-1
或(如果您更喜欢0
/1
或false
/true
或'+'
/'-'
)),例如[-1,-1,-1,1,-1,1]
。
除了一对列表,还可以有一对列表,例如 [[6,-1],[-12,-1],...
输出量
[[1,-2],[5,0],[1,1],[-1,3]]
[0,1,0,5,1,0,-1]
规则
这是一个代码高尔夫挑战。无法使用任何标准漏洞,并且不能使用具有用于计算Dowker表示法或Bracket多项式的工具的库。(仍然可以使用包含这些库的语言,但不能使用库/软件包)。
测验
// 4-tuples of [dowker_notation, crossing_signs, expected_result, description]
[
[[],[],[[1,0]],"unknot"],
[[2],[1],[[-1,3]],"unknot with a half-twist (positive crossing)"],
[[2],[-1],[[-1,-3]],"unknot with a half-twist (negative crossing)"],
[[2,4],[1,1],[[1,6]],"unknot with two half-twists (positive crossings)"],
[[4,6,2],[1,1,1],[[1,-7],[-1,-3],[-1,5]],"right-handed trefoil knot, 3_1"],
[[4,6,2,8],[-1,1,-1,1],[[1,-8],[-1,-4],[1,0],[-1,4],[1,8]],"figure-eight knot, 4_1"],
[[6,8,10,2,4],[-1,-1,-1,-1,-1],[[-1,-7],[-1,1],[1,5],[-1,9],[1,13]],"pentafoil knot, 5_1"],
[[6,8,10,4,2],[-1,-1,-1,-1,-1],[[-1,-11],[1,-7],[-2,-3],[1,1],[-1,5],[1,9]],"three-twist knot, 5_2"],
[[4,8,10,2,12,6],[1,1,-1,1,-1,-1],[[-1,-12],[2,-8],[-2,-4],[3,0],[-2,4],[2,8],[-1,12]],"6_3"],
[[4,6,2,10,12,8],[-1,-1,-1,-1,-1,-1],[[1,-10],[2,-2],[-2,2],[1,6],[-2,10],[1,14]],"granny knot (sum of two identical trefoils)"],
[[4,6,2,-10,-12,-8],[1,1,1,1,1,1],[[1,-14],[-2,-10],[1,-6],[-2,-2],[2,2],[1,10]],"square knot (sum of two mirrored trefoils)"],
[[6,-12,2,8,-4,-10],[-1,-1,-1,1,-1,1],[[1,-2],[1,6],[-1,10]],"example knot"]
]
外部资源
挑战不是必需的,但是如果您有兴趣:
感谢@ChasBrown和@ H.Pwiz在我对Dowker表示法的定义中遇到错误