Sha256: 7bfd78e785072665854f262f243ead1e705d8b637bec434be7b7d4806e3a440e

Contents?: true

Size: 1.5 KB

Versions: 11

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module MaxAmount
  class Seeker
    # максимальный размер целого числа
    MAX_SIZE_DIGITAL = 1_000

    attr_accessor :input_data, :count_numbers

    def initialize(params = {})
      @input_data = params[:text]

      @count_numbers = params[:nmax]
    end

    def check_errors
      raise InputDataCountNumbersMustExist if @input_data.nil? || @count_numbers.nil?

      raise InputDataEmpty if @input_data.empty?

      raise CountNumbersMustBePositive if @count_numbers.negative?

      raise CountNumbersNotEqualZero if @count_numbers.zero?

      self
    end

    def search
      # берем из строки только целые неотрицательные числа
      numbers = input_data.scan(/\d+/).select do |num|
        num.to_i.is_a?(Integer) && num.to_i.positive?
      end.map(&:to_i).uniq

      # длина каждого числа не может превышать заданную величину "MAX_SIZE_DIGITAL"
      numbers.each { |num| raise InvalidDigitInput if number_length(num.to_i) > MAX_SIZE_DIGITAL }

      # числа должны быть
      raise NotContainZero if numbers.size.zero?

      numbers.sort!.reverse!

      # вывод наибольших целых чисел в количестве "count_numbers" штук
      numbers[0..count_numbers - 1]
    end

    def number_length(digit)
      # Math.log10(digit).to_i + 1
      # или
      digit.to_s.chars.map(&:to_i).count
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
max_amount-1.4.2 lib/max_amount/seeker.rb
max_amount-1.4.0 lib/max_amount/seeker.rb
max_amount-1.3.9 lib/max_amount/seeker.rb
max_amount-1.3.8 lib/max_amount/seeker.rb
max_amount-1.3.7 lib/max_amount/seeker.rb
max_amount-1.3.6 lib/max_amount/seeker.rb
max_amount-1.3.5 lib/max_amount/seeker.rb
max_amount-1.3.4 lib/max_amount/seeker.rb
max_amount-1.2.4 lib/max_amount/seeker.rb
max_amount-0.1.1 lib/max_amount/extract_integer.rb
max_amount-0.1.0 lib/max_amount/extract_integer.rb