module Nmax

Attributes

numbers[RW]
size[R]

Public Class Methods

run() click to toggle source
# File lib/nmax.rb, line 3
def run
  warning
  return if wrong_args?
  return if not_presence_stdin?

  @size = ARGV[0].to_i
  @numbers = []
  strings_processing

  puts numbers
end

Private Class Methods

add_number(num) click to toggle source
# File lib/nmax.rb, line 51
def add_number(num)
  return if numbers.include?(num)

  insert_at = numbers.bsearch_index { |n| num > n }
  numbers.insert(insert_at, num) if insert_at
  numbers << num unless insert_at
  fix_overflow
end
add_nums(nums) click to toggle source
# File lib/nmax.rb, line 45
def add_nums(nums)
  return if nums.empty?

  nums.each { |n| add_number(n) }
end
argument_not_number?() click to toggle source
# File lib/nmax.rb, line 33
def argument_not_number?
  !ARGV[0].match?(/^\d+$/)
end
fix_overflow() click to toggle source
# File lib/nmax.rb, line 60
def fix_overflow
  numbers.pop if numbers.size > size
end
not_presence_stdin?() click to toggle source
# File lib/nmax.rb, line 25
def not_presence_stdin?
  $stdin.tty?
end
search_numbers(line) click to toggle source
# File lib/nmax.rb, line 41
def search_numbers(line)
  line.scan(/\d+/).map(&:to_i)
end
strings_processing() click to toggle source
# File lib/nmax.rb, line 37
def strings_processing
  $stdin.each { |line| add_nums search_numbers(line) }
end
warning() click to toggle source
# File lib/nmax.rb, line 20
def warning
  warn 'Not reading from stdin' if not_presence_stdin?
  warn 'Nmax must receive one argument (number). Example: nmax 100' if wrong_args?
end
wrong_args?() click to toggle source
# File lib/nmax.rb, line 29
def wrong_args?
  ARGV.size != 1 || argument_not_number?
end