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