20251125
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $usage = "\n\nusage: $0 weldmer\n\n";
|
||||
|
||||
my $weldmer = $ARGV[0] or die $usage;
|
||||
|
||||
main: {
|
||||
|
||||
if (-f $weldmer) {
|
||||
open (my $fh, $weldmer) or die $!;
|
||||
while (<$fh>) {
|
||||
my $weldmer = $_;
|
||||
chomp $weldmer;
|
||||
&check_weldmer($weldmer);
|
||||
}
|
||||
close $fh;
|
||||
}
|
||||
else {
|
||||
&check_weldmer($weldmer);
|
||||
}
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
####
|
||||
sub check_weldmer {
|
||||
my ($weldmer) = @_;
|
||||
|
||||
my $weldmer_len = length($weldmer);
|
||||
|
||||
my $left_substr = substr($weldmer, 0, int($weldmer_len/2));
|
||||
my $right_substr = substr($weldmer, int($weldmer_len/2));
|
||||
|
||||
# &check_per_id($weldmer);
|
||||
&check_per_id($left_substr);
|
||||
&check_per_id($right_substr);
|
||||
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
####
|
||||
sub check_per_id {
|
||||
my ($weldmer) = @_;
|
||||
|
||||
my $weldmer_len = length($weldmer);
|
||||
|
||||
my $half_len = int($weldmer_len/2);
|
||||
#print "Half_len of " . length($weldmer_len) . " = $half_len\n";
|
||||
|
||||
my @chars = split(//, $weldmer);
|
||||
|
||||
my $max_ratio = 0;
|
||||
|
||||
my $best_left = "";
|
||||
my $best_right = "";
|
||||
|
||||
for (my $i = 0; $i < $half_len; $i++) {
|
||||
|
||||
for (my $j = $i + 1; $j <= $half_len; $j++) {
|
||||
|
||||
my $ref_pos = $i;
|
||||
my $other_pos = $j;
|
||||
|
||||
my $count_same = 0;
|
||||
my $count_chars = 0;
|
||||
|
||||
my $left_sub = "";
|
||||
my $right_sub = "";
|
||||
|
||||
|
||||
|
||||
while ($other_pos <= $j + $half_len - 1) {
|
||||
|
||||
$count_chars++;
|
||||
if ($chars[$ref_pos] eq $chars[$other_pos]) {
|
||||
$count_same++;
|
||||
}
|
||||
|
||||
$left_sub .= $chars[$ref_pos];
|
||||
$right_sub .= $chars[$other_pos];
|
||||
|
||||
$ref_pos++;
|
||||
$other_pos++;
|
||||
|
||||
}
|
||||
|
||||
my $ratio = $count_same/$count_chars;
|
||||
if ($ratio > $max_ratio) {
|
||||
$max_ratio = $ratio;
|
||||
$best_left = $left_sub;
|
||||
$best_right = $right_sub;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$max_ratio = sprintf("%.3f", $max_ratio);
|
||||
print "$weldmer\t$best_left\t$best_right\t$max_ratio\n";
|
||||
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user