hrom512-nmax 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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