ひも数と交差点数を与えて、その全ての組みひもの一覧を生成することができるプログラムです。
・準備
K(=正整数)= ひも数(=n<K、初期値2)+交差点数(=Kーn)とした時、Kの値に初期値と最終値を持たせることでその組みひもの一覧を生成させていきます。
[Windowsの場合]コマンドプロンプトでperl -vを実行して、perl がインストールされてなければ、ActivePerlかStrawberryPerlをインストールします。
[Windowsの場合] C:\Users\usernameの下にjonesディレクトを作ります。[Linuxの場合] /home/usernameの下にjonesディレクトリを作ります。
jonesディレクトリにbraid.plファイルを置きます。
求めたい組みひも一覧を得るために、braid.plの6~7行目のKの初期値(=k_begin)とKの最終値(=k_end)の数値を書き換えます。例えば、Kの初期値4最終値5とした時、K=4の(ひも数2交差点数2)、(ひも数3交差点数1)、K=5の(ひも数2交差点数3)、(ひも数3交差点数2)、(ひも数4交差点数1)、の組みひもの一覧をそれぞれ得ることができます。
コマンドプロンプトを起動し、プログラムを動かすカレントディレクトリに移動します。[Windowsの場合] cd C:\Users\username\jones [Linuxの場合] cd /home/username/jones
braid.pl プログラムを起動します。[Windowsの場合] perl braid.pl [Linuxの場合] braid.pl
出力結果には、ひも数/s(交差点の符号)(交差点があるひもの番号)/・・・・/、と出力されます。例えば、K=3,n=2の時、2/s+1/,2/s-1/の2つが出力されます。2/s+1/は、ひも数が2、σ1の組みひものことです。2/s-1/は、ひも数が2、σ1―1の組みひものことです。
#!/usr/bin/perl
#正整数Kを1つ定める、紐数n(<k,初期値3),交差点数k-nの組みひもを全て生成するプログラム;
#例えば、5/s+1/s-2/s+4/は、ひも数が5,σ_1σ_2^{-1}σ_4の組みひものことです;
my $k_begin=3;
my $k_end=5;
&begin($k_begin,$k_end);
sub begin {
my($k,$end) = @_;
do {
if ($k > $end) {
exit;
}else {
print "K is $k\n";
$n = 2;
while($k-$n >= 1) {
&number3($k,$n);
++$n;
}
$k=$k+1;
}
} while (1) ;
}
sub number3 {
my($k,$n) = splice(@_, 0, 2);
if (@_ < $k-$n) {
my($i);
for ($i = 1 ; $i <= $n-1 ; ++$i) {
&number3($k, $n, @_, $i);
&number3($k, $n, @_, -$i);
}
}
else {
&begin_cross($k,$n,\@_);
}
}
sub begin_cross {
my($k,$n,$string) = @_;
my @t = ();
push(@t,$n);
for (my $u=0; $u<@$string; ++$u) {
if (@$string[$u] > 0) {
push(@t,"s+@$string[$u]");
}
else {
push(@t,"s@$string[$u]");
}
}
my $answer = join("/",@t,"");
print "$answer\n";
}
1;