in reply to Metric for confidence of complex match

The following weights each match by making better field matches much more important than lesser field matches:

use warnings; use strict; my $line = 0; my @data = map {chomp; [split, ++$line, -1]} (<DATA>); @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

Prints:

1 1 2 2 2 3 14 0 2 2 2 2 2 16 1 1 1 2 3 4 16 0 1 3 3 1 1 20 0 0 3 3 3 5 27

Note that the last two columns are the original line number and the calculated weighting respectively.


Perl is Huffman encoded by design.