結び目のダウカー表記法とその交差記号を与え、そのブラケット多項式を計算します。
より多くの技術的な定義がありますが、この課題に対しては、結び目を、文字列の両端を結び付けて物理的に作られたものと考えるだけで十分です。ノットは3次元で存在するため、紙にノットダイアグラムを描画するときは、ノットダイアグラムを使用します。2次元投影では、交差が正確に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などの番号が付けられた交差点で与えられます。
上記の画像では、最初の図のアウトラインの交差はの形式であり、2番目の図(正の平滑化)または3番目の図(負の平滑化)のように変換できます。
まだ混乱していますか?のブラケット多項式を見つけようとする例を見てみましょう(注:これは相互にリンクされた2つのノットです。この種の図は、入力が単一のノットのみであるため、このチャレンジの潜在的な入力ではありませんが、アルゴリズムの中間結果。)
最初にルール3を使用します
新しいノットの両方で再びルール3を使用します
これらの4つの新しいノットを最初の方程式に代入します。
これら4にルール1と2を適用すると、
だから、これは私たちに教えて
結び目理論の簡単な紹介を完了しました!
入力
2つのリスト:
ダッカー記法、例えば
[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表記またはブラケット多項式を計算するツールを備えたライブラリは使用できません。(ライブラリ/パッケージではなく、これらのライブラリを含む言語を引き続き使用できます)。
テスト
// 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"]
]
外部リソース
チャレンジには必要ありませんが、興味がある場合:
Dowker表記法の定義の間違いを見つけてくれて、@ ChasBrownと@ H.Pwizに感謝します。