作业帮 > 综合 > 作业

Perl如和生成这种格式的序列?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/01 12:49:38
Perl如和生成这种格式的序列?
有三个文本文件,里面分别有不同的元素若干个,分别代表了生成序列前三位的可能性.
1.txt中有:aac abc acc adc .
2.txt中有:bxa bxab byc bssxd .
3.txt中有:efg hij lmop adc .
现在每次要生成20个,随机的,长短不一的混合的序列格式如下:
XX1-XX2-XX3 当序列有3位时,每一位分别从3个文本文件中随机.
XX1-XX2 当序列有2位时,第一位从1.txt中随机,第二位从2.txt中随机.
XX1 当序列有1位时,这一位只能从1.txt中随机.
例如:
aac-bxab-efg
adc
acc-bssxd
acc-bxa-lmop
.
请问代码怎么写?
use strict;

my $howManyTimes = 1 ; # 每次即是要几多次 ?
my $howManyElementsPerRound = 20; # 每次要生成20个
my $maxChainSize = 3; # 当序列有 x 位时
my $e = {};

sub random { # random ( $min, $max ) 
    my ( $min, $max ) = @_;
    my $try = undef;
    do { $try = int (rand ( $max+1 )) } 
        until ( $try >= $min && $try <= $max ) ;
    return $try;
}
sub makeFiles {
    for ( 1..3 ) { 
        open F, ">$_.txt";
        for my $make ( 1..50 ) {
            my $genLen = random ( 3, 4 ) ;        
            for my $len ( 1 .. $genLen ) {
                print F chr(random( 97, 122 )) ;
            }    print F " ";
        } close F;
    }
}
sub loadFiles {
    for my $f ( 1..3 ) {
        open F, "$f.txt" or die "Can't open $f.txt";
        chomp ( my @data = <F> ) ;    
        close F;
        push @{$e->{$f}}, split /\s+/, $_ foreach @data;
    }
}

#makeFiles; # 见下文注解
loadFiles;
for my $times ( 1..$howManyTimes ) {
    for my $round ( 1.. $howManyElementsPerRound ) {
        my $str = "";
        my $roundLen = random ( 1, $maxChainSize ) ;    
        for my $SizeAlsoFile ( 1 .. $roundLen ) {
            my $arrayLen = $#{$e->{$SizeAlsoFile}} ;
            my $elemPos = random ( 0 .. $arrayLen );
            $str .= $e->{$SizeAlsoFile}[$elemPos] . "-";        
        }    
        chop $str;
        #print "Round:$round, Len:$roundLen: $str$/"; # 用来验证的
        print "$str$/"; # 照你的要求输出
    }
    print $/
}
 
makeFile 是我自已生成的 3 个档,  给你参巧我所理解你档案的内容是怎样的