Levenshtein distance/Alignment: Difference between revisions
→{{header|Perl}}: put everything in one array for a shorter code
(→{{header|Perl}}: put everything in one array for a shorter code) |
|||
Line 13:
=={{header|Perl}}==
<lang perl>use
use warnings;
use List::Util qw(min);
sub levenshtein_distance_alignment {
my @s = ('^', split //, shift);
my @t = ('^', split //, shift);
my @
@{$
@{$
for my $i (1 .. $#s) {
for my $j (1 .. $#t) {
my $min =
);
@{$A[$i][$j]}{qw(s t)} =
$A[$i-1][$j]{d} == $min ? ($A[$i-1][$j]{s}.$s[$i], $A[$i-1][$j]{t}.'-') :
$A[$i][$j-1]{d} == $min ? ($A[$i][$j-1]{s}.'-', $A[$i][$j-1]{t}.$t[$j]) :
else {
$A[$i-1][$j-1]{s}.$s[$i],
$A[$i-1][$j-1]{t}.$t[$j]
);
}
}
}
return @{$
}
print join "\n", levenshtein_distance_alignment "rosettacode", "raisethysword";</lang>
{{out}}
<pre>ro-settac-o-de
|