与えられた並べ替えを実現するあみだくじの生成
Posted feedbacks - Perl
__END__ 以下に圧縮版置きますた.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | my @current = @ARGV;
my @maze = ();
my $done = 0;
until($done)
{
my $row = [1..(@ARGV-1)];
$done = 1;
for(my $i=0;$i< @current - 1;$i++)
{
next if $current[$i] < $current[$i+1];
$row->[$i]=0;
@current[$i,$i+1] = @current[$i+1,$i];
$done = 0;
$i++;
}
@maze = ($row, @maze) unless $done;
}
print join(" ",@current),"\n",
join("\n",map{"|".join("|",map{$_?' ':'-'}@$_)."|"}@maze),"\n",
join(" ",@ARGV),"\n";
__END__
@m=@A=@ARGV;@M=();for(;;){@r=(1..(@A-1));$f=1;for($i=0;$i<@A-1;$i++){next if$A[
$i]<$A[$i+1];$f=$r[$i++]=0;@A[$i,$i-1]=@A[$i-1,$i]}last if$f;@M=([@r],@M)}print
join"\n",join(" ",@A),(map"|".join("|",map$_?' ':'-',@$_)."|",@M),join" ",@m
|


shiro
#4704()
Rating13/13=1.00
お題#4476を見て思いつきました。
0からn (n>=1) までの数字を任意の順で並べたリストが与えられた時、0からnまでが順に並んだ状態から出発して、与えられたリストの順で結果が得られるようなあみだくじを作成して出力するプログラムを書いてください。
与えられたリストが (3 5 2 4 0 1) の場合、出力の1例を示します:
一応、制約条件を示しておきます。
一つのリストに対して複数の解があり得ます。ナイーブな解に飽き足らなければ出力行数をなるべく少なくする解を求める方法を考えてみてください。
[ reply ]