Sha256: 2e8347369ce6dfba2bd29e4097e7321af5397cddfc8626ab25e2fae6058cec92

Contents?: true

Size: 1.41 KB

Versions: 156

Compression:

Stored size: 1.41 KB

Contents

class OCR
  attr_reader :text
  def initialize(text)
    @text = text.split("\n")
  end

  def convert
    numbers = []
    each_row do |row|
      numbers << values_in_row(row)
    end
    format(numbers)
  end

  private

  def format(numbers)
    numbers.map(&:join).join(',')
  end

  def values_in_row(row)
    values = []
    each_column do |column|
      values << value_at(row, column)
    end
    values
  end

  def each_row
    (0...row_count).step(4) do |row|
      yield row
    end
  end

  def each_column
    (0...column_count).step(3) do |column|
      yield column
    end
  end

  def value_at(row, column)
    value(pattern_at(row, column)) || garble
  end

  def pattern_at(row, column)
    [
      text[row][column, 3],
      text[row + 1][column, 3],
      text[row + 2][column, 3],
      text[row + 3][column, 3]
    ]
  end

  def column_count
    text.first.length
  end

  def row_count
    text.length
  end

  def garble
    '?'
  end

  def value(pattern)
    {
      [' _ ', '| |', '|_|', '   '] => '0',
      ['   ', '  |', '  |', '   '] => '1',
      [' _ ', ' _|', '|_ ', '   '] => '2',
      [' _ ', ' _|', ' _|', '   '] => '3',
      ['   ', '|_|', '  |', '   '] => '4',
      [' _ ', '|_ ', ' _|', '   '] => '5',
      [' _ ', '|_ ', '|_|', '   '] => '6',
      [' _ ', '  |', '  |', '   '] => '7',
      [' _ ', '|_|', '|_|', '   '] => '8',
      [' _ ', '|_|', ' _|', '   '] => '9'
    }[pattern]
  end
end

Version data entries

156 entries across 156 versions & 1 rubygems

Version Path
trackler-2.1.0.0 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.55 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.54 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.53 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.52 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.51 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.50 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.49 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.48 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.47 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.46 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.45 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.44 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.43 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.42 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.41 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.40 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.39 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.38 tracks/ruby/exercises/ocr-numbers/example.rb
trackler-2.0.8.37 tracks/ruby/exercises/ocr-numbers/example.rb