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
| #!/usr/bin/env perl
use strict;
use warnings;
#on récupère le contenu du fichier, dans un tableau de ligne
my @lines = <>;
# on supprime la première ligne d'entête
shift @lines;
# on supprime les retours à la lignes
chomp @lines;
my %points;
foreach (@lines) {
my @fields = split;
# si la ligne a bien trois champs comme une ligne valide
if ( @fields == 3 ) {
# on récupère le point de cette ligne
$points{ $fields[0] } = [ @fields[ 1, 2 ] ];
}
}
my %distances;
# on récupère la liste des noms de points, triée alphabétiquement
my @points_names = sort keys %points;
# double boucles, les distances seront stockées dans %distances
# la distance entre deux points a et b sera dans
# $distances{a}{b} si a lt b, $distances{b}{a} si b lt a
for my $i ( 0 .. $#points_names ) {
for my $j ( $i+1 .. $#points_names ) {
my ( $pa, $pb ) = ( $points_names[$i], $points_names[$j] );
$distances{$pa}{$pb} =
sqrt( ( $points{$pa}[0] - $points{$pb}[0] )**2 +
( $points{$pa}[1] - $points{$pb}[1] )**2 );
}
} |
Partager