Sha256: ecc9627d0fb0d4e355c9bbb28c7781f318ffed9d1883fc58f2fa0a815f27d4fe

Contents?: true

Size: 1.66 KB

Versions: 73

Compression:

Stored size: 1.66 KB

Contents

package OCR;

use strict;
use warnings;

sub new {
    my ($class, $ocr) = @_;
    my $self = bless {} => $class;

    $self->_create_ocr_rows($ocr);
    $self->_create_list_table;

    return $self;
}

sub convert {
    my $self = shift;
    my @numbers;

    foreach my $ocr (@{$self->{ocr_rows}}) {
        push @numbers => $self->_convert_row($ocr);
    }

    return join "," => @numbers;
}

sub _convert_row {
    my ($self, $ocr) = @_;
    my @ocrs = $self->_list_ocr($ocr);
    my $number;

    foreach my $i (0..$#ocrs) {
        my $is_garbled = 1;
        foreach my $j (0..$#{$self->{list}}) {
            if ($ocrs[$i] eq $self->{list}->[$j]) {
                $number .= $j;
                $is_garbled = 0;
                last;
            }
        }
        $number .= '?' if $is_garbled;
    }

    return $number;
}

sub _list_ocr {
    my ($self, $ocr_str) = @_;
    my @lines = split '\n', $ocr_str;
    my @ocrs;
    my $len = length $lines[0];
    my $index = 0;

    while ($index < $len) {
        $ocrs[$index/3] = join "\n" => (
                map { substr($lines[$_], $index, 3) } 0..3
            );

        $index += 3;
    }
    return @ocrs;
}

sub _create_list_table {
    my $self = shift;
    my $all;
    chomp($all = <<'ALL');
 _     _  _     _  _  _  _  _ 
| |  | _| _||_||_ |_   ||_||_|
|_|  ||_  _|  | _||_|  ||_| _|
                              
ALL
    $self->{list} = [ $self->_list_ocr($all) ];
}

sub _create_ocr_rows {
    my ($self, $ocr_str) = @_;
    my @ocrs = split '\n', $ocr_str;
    my @indexes = grep { $_ % 4 == 0 } 0..$#ocrs;

    foreach my $i (@indexes) {
        push @{$self->{ocr_rows}} => join "\n", @ocrs[$i..($i+3)];
    }
}

1;

Version data entries

73 entries across 73 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.179 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.178 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.177 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.176 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.175 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.174 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.173 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.172 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.171 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.170 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.169 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.167 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.166 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.165 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.164 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.163 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.162 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.161 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm
trackler-2.2.1.160 tracks/perl5/exercises/ocr-numbers/.meta/solutions/OCR.pm