1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #!/usr/bin/perl
# -*- coding:utf-8 -*-
use warnings;
use strict;
use locale;
use 5.010;
use Math::Random qw(random_uniform random_normal);
use List::Util qw(sum);
sub split_seq
{
return -1 if (@_ != 1);
(my $seq) = @_;
my $N = length($seq);
my $mean = 50;
my $sigma = 2;
my $full = 0.95;
my $iter = 0;
my $total = 0;
my $occuped = 0;
my @occupation ;
for (my $i = 0; $i < $N; $i++) { push @occupation, 0; }
while ($occuped / $N < $full)
{
my $start = int(random_uniform(1, 0, $N) + 0.5);
my $width = int(random_normal(1, $mean, $sigma) + 0.5);
my $finish = $start + $width;
next if ($finish > $N);
for (my $i = $start; $i < $finish; $i++) { $occupation[$i] = 1; }
$occuped = sum(@occupation);
my $snippet = substr($seq, $start, $width);
$total += $width;
say join(" ", ++($iter), $width, $snippet);
}
say "Moyenne : ", $total / $iter;
return 0;
}
my $sequence =
"CCGCAGTCGCCGCCTCCGCAGCAGCAGCAGCAGCAGCAACAACTACAACAACAACAACAACAGCCACCAGGGCA" .
"GCAACAACCACACCAGTTACAACAGCCCCAACACCAACAGCGATAACAACAACATATAGATCGCGGAATCTGCT" .
"GAAAGCCACCGCCAAAGTGAAGAAGAAGAAAAAGTGGAAGCAAATCTCCTTCGTCGACGACCAGCAACGCTTGA" .
"AGCAAGCAGCGACGTCGGCGGAGCGCAAACGCTCCACCAGCAGCGCCCCGCCCGCCCTCGAGAGCAACGTACCG" .
"CCGCGGTTGGGGCGCTTTCTGCGGCAAAAGAGCAGCGAAACTAACAGCGCTGCAACGTCAGCAGCAGCGGCGGC" .
"AGTGCAAACGGAAGCGGAAACAGGACGCCGGAAATCGTCGGCGGCATCGATAATCGCAGCGGCAGCGGGCGCTG" .
"CTGGTTTGCACAACAATAACAGCAGCAGCTGCGCAGCGACCGCCAGCGAGGAGCAAAACTCGAGCGGTACGCTC" .
"ACCGGCAGCAGCGGCAATACTTCCACGTCGACGTGGTGCGGCAGCATCAACTTCCTGGTGTATATGG";
split_seq($sequence) |
Partager