UPC: Difference between revisions
Content added Content deleted
m (calculate functions only once) |
SqrtNegInf (talk | contribs) m (→{{header|Perl}}: tweaks) |
||
Line 313: | Line 313: | ||
sub decode_UPC { |
sub decode_UPC { |
||
my($line) = @_; |
my($line) = @_; |
||
my(%pattern_to_digit_1,%pattern_to_digit_2,@digits,$sum); |
my(%pattern_to_digit_1,%pattern_to_digit_2,@patterns1,@patterns2,@digits,$sum); |
||
for my $p (' ## #', ' ## #', ' # ##', ' #### #', ' # ##', ' ## #', ' # ####', ' ### ##', ' ## ###', ' # ##') { |
|||
push @patterns1, $p; |
|||
' ## #', ' # ####', ' ### ##', ' ## ###', ' # ##'); |
|||
push @patterns2, $p =~ tr/# / #/r; |
|||
} |
|||
$patterns2[$_] =~ tr/# / #/ for 0..$#patterns2; |
|||
$pattern_to_digit_1{$patterns1[$_]} = $_ for 0..$#patterns1; |
$pattern_to_digit_1{$patterns1[$_]} = $_ for 0..$#patterns1; |
||
Line 331: | Line 331: | ||
my($match1,$match2) = ($+{match1}, $+{match2}); |
my($match1,$match2) = ($+{match1}, $+{match2}); |
||
push @digits, $pattern_to_digit_1{$_} for $match1 =~ /(. |
push @digits, $pattern_to_digit_1{$_} for $match1 =~ /(.{7})/g; |
||
push @digits, $pattern_to_digit_2{$_} for $match2 =~ /(. |
push @digits, $pattern_to_digit_2{$_} for $match2 =~ /(.{7})/g; |
||
$sum += (3,1)[$_%2] * $digits[$_] for 0..11; |
$sum += (3,1)[$_%2] * $digits[$_] for 0..11; |
||
$sum % 10 ? '' : join '', @digits; |
$sum % 10 ? '' : join '', @digits; |