Questions tagged «knot-theory»

1
“不知道”还是“不知道”?
编写一个程序,处理缠结字符串的ASCII艺术表现形式,并确定是否可以将其解缠为简单循环。纠结使用字符表示-并|表示水平和垂直段,以及+代表角。字符串经过其自身的位置如下所示: | | ------- ---|--- | | (Horizontal segment on top) (Vertical segment on top) 字符串的两端连接在一起;没有松散的结局。 如果您的程序确定无法将字符串解开成简单的循环,则应输出单词KNOT。否则,应输出单词NOT。 这是一个代码挑战,因此最短的有效答案(以源代码的字节为单位)将获胜。 限度 ASCII输入最多包含25行,每行80个字符。您可以假定所有行都用相同长度的空格填充。 例子 输入: +-------+ +-------+ | | | | | +---|----+ +-------+ | | | | | | +-------|------------|---+ | | | | +---+ +---+ 输出: KNOT 输入: +----------+ | | …

2
疑难杂症
给定结的陶氏符号及其交叉符号,请计算其括号多项式。 尽管存在更多的技术定义,但对于这一挑战,将结视为通过将绳的两端连接在一起而实际制成的东西就足够了。由于结存在于三维中,因此当我们将其绘制在纸上时,我们使用结图 -二维投影,其中的交叉点恰好是两条线,一上一下。 这里(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等的交叉点。 AAA DDD⟨D⟩⟨D⟩\langle D\rangle 没有任何交叉的唯一循环的多项式为1。 DDDDDDDDD(−A2−A−2)(−A2−A−2)(-A^2-A^{-2}) DDD 在上图中,可以将第一张图中具有轮廓的交叉形式转换为第二张图(也称为正平滑)或第三张图(负平滑)。 AAAA−1A−1A^{-1} 感到困惑了吗?让我们做一个例子,尝试找到()的方括号多项式(注:这是两个连接在一起的结。这种图在此挑战中将不是潜在的输入,因为输入将只是单个结,但可能显示为算法的中间结果。) 我们首先使用规则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],... 输出量 A−2+5+A−A3A−2+5+A−A3A^{-2}+5+A-A^3[[1,-2],[5,0],[1,1],[-1,3]] −k…k−k…k-k\ldots kk∈Nk∈Nk\in \mathbb{N}[0,1,0,5,1,0,-1]A0A0A^0 规则 这是一个代码高尔夫挑战。无法使用任何标准漏洞,并且不能使用具有用于计算Dowker表示法或Bracket多项式的工具的库。(仍然可以使用包含这些库的语言,但不能使用库/软件包)。 测验 // 4-tuples of [dowker_notation, crossing_signs, …

1
垫片编织-画一个Sierpiński结
给定一个整数N> = 2,产生一个图像,该图像显示度数为N的Sierpiński结。 例如,以下是2、3、4和5级的结: 单击图像以查看完整尺寸(度数越高,图像越大)。 规格 使用N度的Sierpiński三角形的顶点作为引导点绘制N度的Sierpiński结。N度的Sierpiński三角形是排列成较大三角形的三个N-1度的Sierpiński三角形。0度的Sierpiński三角形是等边三角形。 最小的三角形组成部分的边长为64,这使Sierpiński三角形的结长以 外部三角形的中心位于图像的中心。这在顶部和底部没有相等的空格。 输出是边长为的正方形图像,其中是ceiling(x),大于或等于x的最小整数。当三角形的中心位于图像的中心时,此大小足够大,足以将基础Sierpiński三角形的顶部顶点包含在图像中。 单个曲线必须在其上方和下方通过,并严格交替。解决方案可以在上下限之间选择,也可以在上下限之间选择。 示例图像显示黑色前景和白色背景。您可以选择任何两种容易区分的颜色。允许抗锯齿,但不是必需的。 在两个圆弧相交处或曲线在其自身上方或下方通过的地方一定不能有间隙。 输出可以是任何光栅格式的图像文件,也可以是包含正确的默认显示尺寸的任何矢量格式的图像文件。如果直接在屏幕上显示,则必须采用一种允许滚动的形式,以便在大于屏幕时查看完整图像。 确定圆弧中心,半径和厚度 结由一系列圆弧构成,这些圆弧在切线平行的点相交,从而实现无缝连接。这些弧显示为环形扇形(具有厚度的弧)。 这些弧的中心是最小的倒置三角形的顶点。每个这样的顶点都是一个弧的中心。 每个弧的半径为 唯一的例外是,三个最外面的三角形(在大三角形的拐角处)的弧线的中心是两个相邻内部顶点的中点,因此半径为 每个圆弧的总厚度(内半径和外半径之差)为,并且其黑色边框的厚度均为。曲线必须具有这些边框,而不仅仅是实心条。 计量单位 所有距离均以像素为单位(1是2个相邻像素之间的水平或垂直距离)。 3的平方根必须精确到7个有效数字。也就是说,您的计算必须等同于使用ROOT3,这样1.7320505 <= ROOT3 < 1.7320515 计分 以字节为单位的最短代码获胜。 对于那些想知道的人,不包括N = 0和N = 1,因为它们对应于一个圆和一个三叶形,这与适用于N> = 2的模式不太匹配。我希望应对这种挑战的大多数方法都需要为0和1添加特殊情况代码,因此我决定省略它们。

1
疑难杂症
编写一个程序,根据结的结构绘制一个二维结图。打结恰恰是听起来的样子:一圈被绑住的绳子。在数学中,结图显示了一根绳子在其自身上方或下方交叉以形成结的位置。一些示例结图如下所示: 绳子交叉的那条线有一个断点。 输入:描述结的输入是整数数组。绳子交叉n次的结可以表示为n个整数的数组,每个整数的值都在[0,n-1]范围内。让我们把这种阵列ķ。 要获得描述结的数组,请对段0到n-1中的每一个进行编号。段0应该通向段1,应该通向段2,应该通向段3,依此类推,直到段n-1环回并通向段0。当另一段绳子越过段时,段结束(由图中的折线表示)。让我们来看看最简单的结-三叶结。在对段进行编号后,段2越过段0时结束。当段0越过时,段1结束;当段1越过时,段2结束。因此,描述结的数组为[2,0,1]。通常,段x从段x-1 mod n离开的地方开始,到段K [x]越过它的地方结束。 下图显示了结图,带有标记的段和描述结的相应数组。 顶部的三幅图是真实的结,而底部的三幅图是绳索的环,它们自己交叉但实际上并未打结(但仍具有相应的代码)。 您的任务是编写一个函数,该函数采用一个整数K数组(您可以称其为不同)来描述一个结(或实际上未打结的绳索环),并生成相应的结图,如上所述。例子。如果可以,请提供代码的原始版本或说明,并提供示例代码输出。相同的结通常可以用多种不同的方式表示,但是如果函数输出满足的结图将输入作为其可能的表示之一,则您的解决方案是有效的。 这是代码高尔夫球,因此以字节为单位的最短代码获胜。代表绳索的线的厚度可以为1像素,但是越下和越线必须清楚地区分(绳索的断口尺寸应比绳索的厚度大至少在任一侧至少一个像素) 。 我将对依赖于内置结理论功能的答案进行投票,但是最后选择的答案不能依赖于内置结理论功能。 我对我的记法所了解的一切:我相信有些值序列似乎并不对应于任何结或不结。例如,似乎无法绘制序列[2、3、4、0、1]。 除此之外,假设您进行了交叉,并从该交叉处开始,沿着绳索的一个方向前进,并用成功更大的积分值标记遇到的每个未标记的交叉处。对于交替的结,有一种简单的算法可以将我的符号转换为这样的标签,对于交替的结,将这个标签转换为高斯代码很简单: template<size_t n> array<int, 2*n> LabelAlternatingKnot(array<int, n> end_at) { array<int, n> end_of; for(int i=0;i<n;++i) end_of[end_at[i]] = i; array<int, 2*n> p; for(int& i : p) i = -1; int unique = 0; for(int i=0;i<n;i++) { if(p[2*i] < …

13
斐波那契产品
您可以将大于0的数字分解为正Fibonacci数字的唯一和。在这个问题中,我们通过重复减去最大可能的正斐波那契数来做到这一点。例如: 1 = 1 2 = 2 3 = 3 4 = 3 + 1 12 = 8 + 3 + 1 13 = 13 100 = 89 + 8 + 3 现在,我将斐波那契乘积称为与上面相同的列表,但加法运算被乘积代替。例如,f(100) = 89 * 8 * 3 = 2136。 编写一个给定正整数n的程序或函数,该函数将返回该数字的斐波那契乘积。 测试用例: 1: 1 2: 2 3: 3 4: …
13 code-golf  math  sequence  fibonacci  code-golf  word  code-golf  cipher  code-golf  string  math  subsequence  code-golf  regular-expression  code-golf  brainfuck  assembly  machine-code  x86-family  code-golf  math  factorial  code-golf  math  geometry  code-golf  math  arithmetic  array-manipulation  math  number  optimization  stack  metagolf  code-golf  tips  assembly  code-golf  tips  lisp  code-golf  number-theory  path-finding  code-golf  number  sequence  generation  code-golf  math  geometry  code-golf  grid  permutations  code-golf  code-golf  graphical-output  geometry  fractal  knot-theory  code-golf  math  arithmetic  code-golf  interpreter  balanced-string  stack  brain-flak  code-golf  math  set-theory  code-golf  math  array-manipulation  code-golf  code-golf  string  natural-language  code-golf  code-golf  math  linear-algebra  matrix  code-golf  string  encode 

1
具有n个交叉点的主要结数
一个主要的结是: 一个非平凡的结,不能写成两个非平凡的结的总和。 结和的说明:将两个结相邻放置, ...然后在它们之间绘制两条线,到每一侧的同一条线上,并删除刚绘制的线之间的部分。两个结的这种组合将形成一个新的非原始结。 以下是所有具有7个以下交叉的主要结(“未结不是主要结”): 您需要输出给定数量的交叉的唯一素结数量。 1 0 2 0 3 1 4 1 5 2 6 3 7 7 8 21 9 49 10 165 11 552 12 2176 13 9988 14 46972 15 253293 16 1388705 我不认为输入大于会知道这些值16,但是如果给出这样的输入,则您的代码需要在足够的时间内找到正确的结果。 OEIS-A002863
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.