nmax-aoirgf 0.1.2 → 0.1.3
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 +4 -4
- data/CHANGELOG +4 -0
- data/README.md +2 -2
- data/lib/nmax_reader.rb +47 -16
- data/nmax.gemspec +3 -3
- data/spec/nmax_reader_spec.rb +11 -0
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9da73431b6eb699aaa93643c6adee14810155f6af5e90e28e5537609ae364f6d
|
4
|
+
data.tar.gz: 7dd3b6dfcd0af4a90dc66a9b2e0c5ef716ff3552304211db2088f8b33271576c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5869d956ab3265689153846e6dc87f1d74de6bae6c4640d8d71327bf654732b767717e32565d46635427772b3c9981e3c367610fa7b1929931c867190794b7cb
|
7
|
+
data.tar.gz: 7e665d6c19537c0b98270d56f7be7c4f50e18ee42d30f186a6f528c970672bdf120fd5f67f42e76176ad0fbaf7ba35f75484dc3040f168b8b8cfadd79b2e8173
|
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
nmax
|
1
|
+
nmax [](https://travis-ci.org/r72cccp/nmax)
|
2
2
|
====
|
3
3
|
|
4
4
|
Ruby gem, reads text data from the input stream, upon completion of the input, displays the n largest integers,
|
@@ -9,7 +9,7 @@ usage
|
|
9
9
|
|
10
10
|
Script runs from console with command:
|
11
11
|
```bash
|
12
|
-
cat <filename> |
|
12
|
+
cat <filename> | nmax <limit_count>
|
13
13
|
```
|
14
14
|
|
15
15
|
Where
|
data/lib/nmax_reader.rb
CHANGED
@@ -2,36 +2,67 @@
|
|
2
2
|
require_relative './nmax_core'
|
3
3
|
|
4
4
|
class NmaxReader
|
5
|
+
attr_reader :block_length
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@digit_buffer = ''
|
9
|
+
@block_length = 121
|
10
|
+
@data_size = 0
|
11
|
+
end
|
12
|
+
|
5
13
|
def main
|
6
14
|
raise ArgumentError, 'You must pass argument - maximum length of matches found.' if ARGV.length != 1
|
7
15
|
|
8
16
|
capture_data(ARGV.first.to_i)
|
9
17
|
end
|
10
18
|
|
11
|
-
def capture_data(count_limit)
|
12
|
-
block_length = 121
|
13
|
-
data_size = 0
|
19
|
+
def capture_data(count_limit, verbose = false)
|
14
20
|
maximum_numbers = NmaxCore.new(count_limit)
|
15
|
-
digit_buffer = ''
|
16
21
|
|
17
22
|
loop do
|
18
|
-
block = $stdin.read(block_length)
|
23
|
+
block = $stdin.read(@block_length)
|
19
24
|
break if block.empty?
|
20
25
|
|
21
|
-
data_size += block.length
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
@data_size += block.length
|
27
|
+
|
28
|
+
print "\rReading: #{@data_size}." if verbose
|
29
|
+
items = block.scan(/\d+/)
|
30
|
+
|
31
|
+
# Extreme cases.
|
32
|
+
# 1. If the entire read data block is a string
|
33
|
+
if items.empty? && !@digit_buffer.empty?
|
34
|
+
maximum_numbers.propose @digit_buffer.to_i
|
35
|
+
@digit_buffer = ''
|
36
|
+
end
|
37
|
+
|
38
|
+
# 2. If the entire block of read data is a number, add it to the buffer
|
39
|
+
if block =~ /^\d+$/
|
40
|
+
@digit_buffer << block
|
41
|
+
next
|
30
42
|
end
|
31
43
|
|
32
|
-
|
33
|
-
|
44
|
+
# 3. If the first found number is the beginning of a block of read data - add it to the buffer and accept
|
45
|
+
if block =~ /^\d/ && !items.empty?
|
46
|
+
next if items.first.length == @block_length
|
47
|
+
|
48
|
+
@digit_buffer << items.first
|
49
|
+
maximum_numbers.propose @digit_buffer.to_i
|
50
|
+
@digit_buffer = ''
|
51
|
+
items.shift
|
52
|
+
end
|
53
|
+
|
54
|
+
# 4. If the last found number is the end of the block of read data - add it to the buffer
|
55
|
+
if block =~ /\d$/ && !items.empty?
|
56
|
+
@digit_buffer << items.last
|
57
|
+
items.pop
|
58
|
+
end
|
59
|
+
|
60
|
+
# Common, the remaining numbers found, if any, are accepted without buffering
|
61
|
+
items.each { |item| maximum_numbers.propose item.to_i } unless items.empty?
|
62
|
+
|
63
|
+
break if block.length < @block_length
|
34
64
|
end
|
65
|
+
maximum_numbers.propose @digit_buffer.to_i if @digit_buffer.length.positive?
|
35
66
|
|
36
67
|
puts "maximum_numbers.items: #{maximum_numbers.items.join(', ')}"
|
37
68
|
maximum_numbers.items
|
data/nmax.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'nmax-aoirgf'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.3'
|
4
4
|
s.executables = ['nmax']
|
5
5
|
|
6
6
|
s.authors = ['Sergio Belevskij']
|
@@ -16,8 +16,8 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.require_paths = ['lib']
|
17
17
|
|
18
18
|
s.add_development_dependency 'rake', '12.3.3'
|
19
|
-
s.add_development_dependency 'rspec', '3.
|
20
|
-
s.add_development_dependency 'simplecov'
|
19
|
+
s.add_development_dependency 'rspec', '3.5.0'
|
20
|
+
s.add_development_dependency 'simplecov'
|
21
21
|
|
22
22
|
s.files = [
|
23
23
|
'LICENSE',
|
data/spec/nmax_reader_spec.rb
CHANGED
@@ -30,5 +30,16 @@ RSpec.describe NmaxReader do
|
|
30
30
|
$stdin = StringIO.new('Text with numbers: 555, 100500, 222, 333, 1001, 777')
|
31
31
|
expect(reader_instance.capture_data(3)).to be == [777, 1001, 100_500]
|
32
32
|
end
|
33
|
+
|
34
|
+
it 'must coverage case when while number found, next readed block is a string' do
|
35
|
+
$stdin = StringIO.new('t' * (reader_instance.block_length - 3) + '777' + 'ddd dff ' * 20)
|
36
|
+
expect(reader_instance.capture_data(1000).length).to be == 1
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'must coverage case when next readed block is all number' do
|
40
|
+
length = reader_instance.block_length - 3
|
41
|
+
$stdin = StringIO.new('t' * length + '777' + '333' * length + '3434 sdf werfwe')
|
42
|
+
expect(reader_instance.capture_data(1000).length).to be == 1
|
43
|
+
end
|
33
44
|
end
|
34
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nmax-aoirgf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergio Belevskij
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -30,28 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.
|
33
|
+
version: 3.5.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.
|
40
|
+
version: 3.5.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: simplecov
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0
|
54
|
+
version: '0'
|
55
55
|
description: Reads text data from the input stream. Upon completion of the input,
|
56
56
|
displays the largest integers.
|
57
57
|
email: bbelevskij@gmail.com
|