hrom512-nmax 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5aea690d2b515de4fce580d352b6bca04548ea0a
4
- data.tar.gz: a6b1a5dbc795e54427beb590788dcaf1fa10e410
3
+ metadata.gz: 427300afda3998ea4c00554de7f8a47fc28090e5
4
+ data.tar.gz: 56ef0be389c1cc9517cbd857fb051b33d0caacef
5
5
  SHA512:
6
- metadata.gz: a93441e0adbcb32cd92262de26360bff30de3002aaf63ac7d562f5b221849452e90052cf380a485b29d92ccb8a08bece704568826ed8e90be3338008dfe1ec93
7
- data.tar.gz: e5cc2e13e02d7bad962fb1838d95b0393ef5996e091be6ba5038e63269b571e6bbd682723cfe4f9bc38d91bdca6b067ec9b4efec17875edc266252bb8151521f
6
+ metadata.gz: 431942af797250f6bb1ac191b2e72797537abbc817590a07d603598ac19bd966e86ecbcce2bf6736ee93295123349f750feeb2b5fe50b328c872c3358cd97f9b
7
+ data.tar.gz: 52c982174b2ba7b30939255da8d557083c33cabbdb05e3ea37ab4a1039ed79631b3691d2b8b05bd13bf03fc26ade43a3455b13173941030824b2c236bb52f100
data/bin/nmax ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'hrom512/nmax'
5
+
6
+ USAGE = 'Usage: cat FILE | nmax NUMBERS_COUNT'
7
+
8
+ unless ARGV.size == 1
9
+ puts USAGE
10
+ exit
11
+ end
12
+
13
+ numbers_count = ARGV.first.to_i
14
+ unless numbers_count > 0
15
+ puts USAGE
16
+ exit
17
+ end
18
+
19
+ numbers_finder = Hrom512::Nmax::MaxNumbersFinder.new($stdin, numbers_count)
20
+ max_numbers = numbers_finder.find
21
+
22
+ max_numbers.each do |number|
23
+ puts number
24
+ end
data/hrom512-nmax.gemspec CHANGED
@@ -14,8 +14,8 @@ Gem::Specification.new do |spec|
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec|features)/}) }
17
- spec.bindir = 'exe'
18
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
17
+ spec.bindir = 'bin'
18
+ spec.executables = ['nmax']
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.required_ruby_version = '>= 2.0'
@@ -23,5 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'bundler'
24
24
  spec.add_development_dependency 'rake'
25
25
  spec.add_development_dependency 'rspec', '~> 3.0'
26
- spec.add_development_dependency 'rubocop'
26
+ spec.add_development_dependency 'rubocop', '~> 0.38'
27
27
  end
data/lib/hrom512/nmax.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'hrom512/nmax/version'
2
2
  require 'hrom512/nmax/numbers_parser'
3
- require 'hrom512/nmax/max_numbers_calculator'
3
+ require 'hrom512/nmax/max_numbers_finder'
4
4
 
5
5
  module Hrom512
6
6
  # Search N maximum elements in the input stream
@@ -0,0 +1,33 @@
1
+ module Hrom512
2
+ module Nmax
3
+ # Find N maximum numbers in input stream
4
+ class MaxNumbersFinder
5
+ MAX_STORE_ELEMENTS = 1_000_000
6
+
7
+ def initialize(input_stream, numbers_count)
8
+ @input_stream = input_stream
9
+ @numbers_count = numbers_count
10
+ end
11
+
12
+ def find
13
+ numbers_parser = NumbersParser.new(@input_stream)
14
+ numbers = []
15
+
16
+ while (number = numbers_parser.next_number)
17
+ next if numbers.include?(number)
18
+
19
+ numbers << number
20
+ numbers = max_elements(numbers) if numbers.size > MAX_STORE_ELEMENTS
21
+ end
22
+
23
+ max_elements(numbers)
24
+ end
25
+
26
+ private
27
+
28
+ def max_elements(numbers)
29
+ numbers.sort.reverse[0..(@numbers_count - 1)]
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  module Hrom512
2
2
  module Nmax
3
- VERSION = '0.1.0'.freeze
3
+ VERSION = '0.1.1'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hrom512-nmax
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Khrebtov Roman
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2016-03-27 00:00:00.000000000 Z
12
12
  dependencies:
@@ -56,20 +56,21 @@ dependencies:
56
56
  name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '0.38'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '0.38'
69
69
  description:
70
70
  email:
71
71
  - roman@alltmb.ru
72
- executables: []
72
+ executables:
73
+ - nmax
73
74
  extensions: []
74
75
  extra_rdoc_files: []
75
76
  files:
@@ -82,10 +83,11 @@ files:
82
83
  - README.md
83
84
  - Rakefile
84
85
  - bin/console
86
+ - bin/nmax
85
87
  - bin/setup
86
88
  - hrom512-nmax.gemspec
87
89
  - lib/hrom512/nmax.rb
88
- - lib/hrom512/nmax/max_numbers_calculator.rb
90
+ - lib/hrom512/nmax/max_numbers_finder.rb
89
91
  - lib/hrom512/nmax/numbers_parser.rb
90
92
  - lib/hrom512/nmax/version.rb
91
93
  homepage: https://github.com/hrom512/nmax
@@ -1,12 +0,0 @@
1
- module Hrom512
2
- module Nmax
3
- # Find N maximum numbers in input stream
4
- class MaxNumbersCalculator
5
- def initialize(input_stream, numbers_count)
6
- end
7
-
8
- def calc
9
- end
10
- end
11
- end
12
- end