UPC: Difference between revisions

16 bytes removed ,  4 years ago
m
m (calculate functions only once)
Line 313:
sub decode_UPC {
my($line) = @_;
my(%pattern_to_digit_1,%pattern_to_digit_2,@patterns1,@patterns2,@digits,$sum);
 
myfor @patterns1my =$p (' ## #', ' ## #', ' # ##', ' #### #', ' # ##', ' ## #', ' # ####', ' ### ##', ' ## ###', ' # ##') {
push @patterns1, $p;
' ## #', ' # ####', ' ### ##', ' ## ###', ' # ##');
my push @patterns2, $p =~ @patterns1tr/# / #/r;
}
$patterns2[$_] =~ tr/# / #/ for 0..$#patterns2;
 
$pattern_to_digit_1{$patterns1[$_]} = $_ for 0..$#patterns1;
Line 331:
 
my($match1,$match2) = ($+{match1}, $+{match2});
push @digits, $pattern_to_digit_1{$_} for $match1 =~ /(.......{7})/g;
push @digits, $pattern_to_digit_2{$_} for $match2 =~ /(.......{7})/g;
$sum += (3,1)[$_%2] * $digits[$_] for 0..11;
$sum % 10 ? '' : join '', @digits;
2,392

edits