use warnings; use strict; my $line = 0; my @data = map {chomp; [split, ++$line, -1]} (); @data = sort {&doCmp} @data; print join "\n", map {join " ", @$_} @data; sub doCmp { calcWeight ($a) if -1 == $a->[-1]; calcWeight ($b) if -1 == $b->[-1]; return $a->[-1] <=> $b->[-1]; } sub calcWeight { my $vector = \@{$_[0]}; my $sum = 0; $sum += $vector->[$_] * $vector->[$_] for (0..@$vector-3); $vector->[-1] = $sum; } __DATA__ 0 1 3 3 1 0 2 2 2 2 1 1 2 2 2 1 1 1 2 3 0 0 3 3 3