nmax_winter 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 575fc40c049bdaf9a14017eefb0674d585f566b90bcb8312d49f19350ca19a5b
4
+ data.tar.gz: 1b1b2d53e4b1605a96a7b14ce0974a19efbe80abfcc448d92e4c7def436e8d07
5
+ SHA512:
6
+ metadata.gz: 3bc4fac7393979e29f2cd94477b9383acba351b229e10d03b2c7afa76557dc55772df55a330f0812c9bbd9d23ac9e942a830c41ce2dbf82b691496ae070df43f
7
+ data.tar.gz: 83863fe959a86ba4ad8d8b573f1bdb6136569fbf0ca7a408eadc43ce5153bd52bcad797d14bae497b95403d6a1d28a591787047fe66750449feeb1969d3ac2dc
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ gem 'rake', '~> 13.0'
7
+ gem 'rspec', '~> 3.6'
8
+ end
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Yasha Winter
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Nmax_winter
2
+
3
+ This gem allows you to find the n largest numbers for a given input text sequence
@@ -0,0 +1,72 @@
1
+ require "sorted_set"
2
+
3
+ module NmaxWinter
4
+ class Nmax
5
+ def initialize(stdin, argv)
6
+ @stdin = stdin
7
+ @nmax = argv[0].to_i
8
+ end
9
+
10
+ def call
11
+ check_valid
12
+ calc_nmax
13
+ rescue ArgumentError => e
14
+ e.message
15
+ end
16
+
17
+ private
18
+
19
+ def check_valid
20
+ raise ArgumentError, "The input data stream is not specified" if @stdin.tty?
21
+ raise ArgumentError, "Enter correct number of the largest numbers" if @nmax.zero?
22
+ end
23
+
24
+ def calc_nmax
25
+ n = @nmax
26
+ set = SortedSet.new
27
+ number = ""
28
+ is_number = true
29
+ previous = ""
30
+ minus = false
31
+ @stdin.each_char do |ch|
32
+ if ch =~ /[0-9]/ && is_number
33
+ number << ch
34
+ previous = ch
35
+ next
36
+ end
37
+
38
+ if [" ", "\n", "\t"].include?(ch)
39
+ number_i = number.to_i if is_number && number.size != 0 && number != "-"
40
+ # не убирется мин число
41
+ set << number_i if number_i && (set.empty? || set.count < n || number_i < set.min)
42
+
43
+ number = ""
44
+ is_number = true
45
+ minus = false
46
+ previous = ch
47
+ next
48
+ end
49
+ if ch == "-" && is_number && ch != previous
50
+ number << ch
51
+ previous = ch
52
+ if minus || number.size > 1
53
+ number = ""
54
+ is_number = false
55
+ end
56
+ minus = true
57
+ next
58
+ end
59
+
60
+ number = "" if ch == "-" && minus
61
+ # other cases
62
+ is_number = false
63
+ end
64
+ number_i = number.to_i if is_number && number.size != 0 && number != "-"
65
+ set << number_i if number_i && (set.empty? || set.count < n || number_i < set.min)
66
+
67
+ set.to_a.join(" ")
68
+ end
69
+ end
70
+ end
71
+
72
+
@@ -0,0 +1,3 @@
1
+ module NmaxWinter
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,5 @@
1
+ module NmaxWinter
2
+ def self.nmax(stdin = STDIN, argv)
3
+ Nmax.new(stdin, argv).call
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path('lib/nmax_winter/version', __dir__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'nmax_winter'
5
+ s.version = NmaxWinter::VERSION
6
+ s.licenses = ['MIT']
7
+ s.summary = "gem for finding the largest numbers in the text"
8
+ s.description = "the gem allows you to find the n largest numbers for a given input text sequence"
9
+ s.authors = ["Yasha Winter"]
10
+ s.email = 'vinter-jasha@yandex.ru'
11
+ s.files = Dir['README.md', 'LICENSE',
12
+ 'CHANGELOG.md', 'lib/**/*.rb',
13
+ 'lib/**/*.rake',
14
+ 'nmax_winter.gemspec', '.github/*.md',
15
+ 'Gemfile', 'Rakefile']
16
+
17
+ s.homepage = 'https://rubygems.org/gems/example'
18
+ s.metadata = { "source_code_uri" => "https://github.com/example/example" }
19
+
20
+ s.add_dependency 'sorted_set'
21
+
22
+ s.add_development_dependency 'rspec', '~> 3.6'
23
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nmax_winter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yasha Winter
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-02-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sorted_set
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.6'
41
+ description: the gem allows you to find the n largest numbers for a given input text
42
+ sequence
43
+ email: vinter-jasha@yandex.ru
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - Gemfile
49
+ - LICENSE
50
+ - README.md
51
+ - lib/nmax_winter.rb
52
+ - lib/nmax_winter/nmax.rb
53
+ - lib/nmax_winter/version.rb
54
+ - nmax_winter.gemspec
55
+ homepage: https://rubygems.org/gems/example
56
+ licenses:
57
+ - MIT
58
+ metadata:
59
+ source_code_uri: https://github.com/example/example
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubygems_version: 3.3.7
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: gem for finding the largest numbers in the text
79
+ test_files: []