c100bit-nmax 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a302ec38c21d95eaf61bf8e21545fd0cac5c9e4f948a84faffa78dfcb36dcbe4
4
+ data.tar.gz: 34948ffc737c4f5b2d7023d2bba5546a00220b7fe0be0e0a1eec22b1fb76fe60
5
+ SHA512:
6
+ metadata.gz: 388b0913e94f6c111bd12c13323d8180e7a47f2bf5c8dd9d8f5776cc4c00a0ca32e685990dbbb0a2ac00293556169a5d9125f5c1887abe76bbced2e705514145
7
+ data.tar.gz: dc98f1fba11093fa52b4f52bb48071b680566af0c530d34f5b7c40ef13ef824d481d51276a2d74775fa04e394f0eaa2acdc38fe28c0e43f69d8d58d578f8789b
@@ -0,0 +1,50 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+
16
+ ## Specific to RubyMotion:
17
+ .dat*
18
+ .repl_history
19
+ build/
20
+ *.bridgesupport
21
+ build-iPhoneOS/
22
+ build-iPhoneSimulator/
23
+
24
+ ## Specific to RubyMotion (use of CocoaPods):
25
+ #
26
+ # We recommend against adding the Pods directory to your .gitignore. However
27
+ # you should judge for yourself, the pros and cons are mentioned at:
28
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
29
+ #
30
+ # vendor/Pods/
31
+
32
+ ## Documentation cache and generated files:
33
+ /.yardoc/
34
+ /_yardoc/
35
+ /doc/
36
+ /rdoc/
37
+
38
+ ## Environment normalization:
39
+ /.bundle/
40
+ /vendor/bundle
41
+ /lib/bundler/man/
42
+
43
+ # for a library or gem, you might want to ignore these files since the code is
44
+ # intended to run in multiple environments; otherwise, check them in:
45
+ Gemfile.lock
46
+ # .ruby-version
47
+ # .ruby-gemset
48
+
49
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
50
+ .rvmrc
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ -f d
2
+ -r spec_helper
3
+ -c
@@ -0,0 +1 @@
1
+ 2.6.3
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ dist: trusty
3
+ deploy:
4
+ provider: rubygems
5
+ gem: c100bit-nmax
6
+ on:
7
+ repo: c100bit/nmax
8
+ api_key:
9
+ secure: ezF5RRcpYFuDrbU0Kf3jSokQJ4rQ5dL4le92u7x0LeX+fObM+PkR4qIkm2zPwfo2xeRQEGcWZVvkhagFCngI7zOHh9zqFKJLszxBaVIqn50HfMLUHKUBdj4/FK3lJjqd7BWMui85JjPktdyUQJkDwmM30IWQ3cTjBOgTWo3LRuykmEbWGN56Wdg8nJ/KSO9XrvsqvKpL2n4ThnwEq+V+41NzQMs0YtBnJKUbal1oPpb2AzRNSaD7yhEgMtcrDCH+YsR7y/qSFR01bJBzhCKqUna3yhHb+EPgo+rUTkGvEwDdREnq2ZNuvIlb3RJwatRUbqeOWdZHS1w8VZfsmVPUC1lS6Y5GC7qay+CGM9Z0hDUNflfRfDmLFP23fLc461e4dUkY65Mpr+xwnYidP434ouYcw5oE/hlThIJcX1PVDzWFG3L2B8Fm49Soa6yieic79vKvrGCoLmktYRmwCGm9bx9S70iwWAynjcidKXvh0JA04T0eHFe6Tgv88LEjlzbz3w5El8OHExNWQGTZZ0uWY0B1QCKU1VsOQ/qZyabeaxbIG6MK918alEaL7d2z6vjNG9ekDrv5mqelG6cXQJeEafcSgUtUCvO9NdegqML/BfhFsF9zuiHapcSGldhRXqYZYvWuNdFgCnv3S+ljlG7eknEzKzuqrDCDEVfdcjOxf2c=
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake'
4
+ gem 'rspec'
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,12 @@
1
+ [![Build Status](https://travis-ci.com/c100bit/nmax.svg?branch=master)](https://travis-ci.com/c100bit/nmax)
2
+
3
+ # Nmax
4
+ Find top N numbers from text file
5
+
6
+ ```
7
+ gem install c100bit-nmax
8
+ ```
9
+
10
+ ```
11
+ cat file.txt | c100bit-nmax 10
12
+ ```
@@ -0,0 +1,5 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new
4
+
5
+ task default: :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'c100bit-nmax'
4
+
5
+ n = ARGV.first.to_i
6
+ ARGV.clear
7
+
8
+ nmax = Nmax.new
9
+
10
+ while str = gets
11
+ nmax.add_numbers_from(str)
12
+ end
13
+
14
+ p nmax.top(n)
@@ -0,0 +1,14 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.authors = ["c100bit"]
3
+ spec.email = ["c100bit@gmail.com"]
4
+ spec.description = %q{Find top numbers}
5
+ spec.summary = ""
6
+ spec.homepage = ""
7
+ spec.license = 'MIT'
8
+ spec.files = `git ls-files`.split($\)
9
+ spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
10
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
11
+ spec.name = "c100bit-nmax"
12
+ spec.require_paths = ["lib"]
13
+ spec.version = '0.2.2'
14
+ end
@@ -0,0 +1,29 @@
1
+ require 'set'
2
+
3
+ class Nmax
4
+ MAX_LENGTH = 1000
5
+
6
+ def initialize
7
+ @s = Set.new
8
+ end
9
+
10
+ def add_numbers_from str
11
+ @s.merge str.scan(/\d{1,#{MAX_LENGTH}}/).map(&:to_i)
12
+ end
13
+
14
+ def top n = nil
15
+ n ||= @s.size
16
+ @s.sort { |a, b| b <=> a } [0..n-1]
17
+ end
18
+
19
+ private
20
+
21
+ def _size
22
+ @s.size
23
+ end
24
+
25
+ def _max
26
+ top.first
27
+ end
28
+
29
+ end
@@ -0,0 +1,8 @@
1
+ Lorem 1, 2, 3, ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae eros ultrices nibh efficitur suscipit sit amet non erat. Proin ac nisl id lorem placerat vulputate. Ut eleifend leo vel magna dignissim, at ornare dolor condimentum. Sed ullamcorper eleifend tellus, in molestie ante lobortis vel. Sed ac lacus id magna lobortis dictum. Praesent posuere sem quis velit consequat, in dapibus elit malesuada. Duis interdum lorem a elementum consectetur. Nunc id lorem cursus, laoreet mauris eget, consectetur nisl.
2
+
3
+ 102, 103, 4 Fusce vel risuseu velit tristique ultrices a consectetur libero. Phasellus posuere at ante eu placerat. Proin mi neque, eleifend a vulputate id, lobortis id tortor. Sed ac tellus maximus, ultricies sem sed, lobortis sapien. Integer dictum libero non nulla accumsan facilisis sed id enim. Phasellus gravida, turpis ac venenatis faucibus, lorem metus porta magna, sed tempus eros mi ac tellus. Ut a libero in eros dictum lacinia eu a turpis. Ut sed lobortis urna, at tempus enim. Etiam risus mi, fermentum sed diam non, pretium efficitur augue.
4
+
5
+ Donec posuere sit amet leo at egestas. Mauris in dignissim odio. Phasellus pharetra, lectus eget varius laoreet, libero velit eleifend orci, in dignissim risus eros eu ex. Integer suscipit iaculis libero, vitae euismod arcu ultricies non. Nunc metus nisl, volutpat eget erat at, varius vulputate diam. Nullam nec diam scelerisque, placerat erat a, bibendum purus. Suspendisse mattis laoreet nibh in tristique. Pellentesque finibus auctor dolor a sollicitudin. Fusce nibh lectus, imperdiet eget sodales in, eleifend finibus nisl. Suspendisse enim neque, pellentesque ut pharetra ac, tincidunt sit amet leo. Proin iaculis non orci et hendrerit.
6
+
7
+ Nunc luctus,1000, 10000;30000 dui id lacinia rutrum, est odio egestas purus, et dapibus dui odio in felis. Donec ullamcorper imperdiet urna. Duis dignissim ac enim sit amet tincidunt. Nam elementum elit eget lobortis vestibulum. Aliquam accumsan, elit tristique lacinia cursus, quam sapien auctor turpis, pretium fermentum sapien risus nec erat. Praesent non auctor justo, nec vulputate mauris. Sed mollis, ex quis eleifend convallis, dolor ligula pretium nulla, non dictum eros elit id tellus. Curabitur in dapibus elit. Praesent pharetra accumsan bibendum. Proin fermentum metus in malesuada semper. Ut aliquet velit nulla, a laoreet lectus suscipit at. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec risus velit, condimentum pulvinar lectus sit amet, blandit iaculis metus.
8
+ Proin ante neque, dictum sed velit nec, sollicitudin mattis lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc gravida vehicula porta. Nunc ultrices tincidunt risus, ut viverra leo dapibus eu. Cras aliquet sit amet mi sit amet varius. Nam sit amet est tincidunt, vehicula nibh ac, cursus arcu. Nulla at fringilla purus. Nullam enim mi, egestas non tellus eget, fringilla auctor ligula. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nunc quis malesuada metus.
@@ -0,0 +1,30 @@
1
+ describe Nmax do
2
+ let(:text) { File.read('spec/fixtures/demo1.txt') }
3
+
4
+ describe '#add_numbers_from' do
5
+ it 'parses all numbers' do
6
+ subject.add_numbers_from text
7
+ expect(subject.send :_size).to eq(9)
8
+ end
9
+
10
+ it 'parses digits up to 1000' do
11
+ str = "1" * 9000
12
+ subject.add_numbers_from str
13
+ expect(subject.send(:_max).digits.count).to eq 1000
14
+ end
15
+ end
16
+
17
+ describe '#top' do
18
+ before { subject.add_numbers_from text }
19
+
20
+ it 'returns top N' do
21
+ expect(subject.top(5).count).to eq(5)
22
+ end
23
+
24
+ it 'returns expected array' do
25
+ expected_array = [30000, 10000, 1000, 103, 102, 4, 3, 2, 1]
26
+ expect(subject.top).to eq expected_array
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1 @@
1
+ require 'c100bit-nmax'
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: c100bit-nmax
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.2
5
+ platform: ruby
6
+ authors:
7
+ - c100bit
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-13 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Find top numbers
14
+ email:
15
+ - c100bit@gmail.com
16
+ executables:
17
+ - c100bit-nmax
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - ".gitignore"
22
+ - ".rspec"
23
+ - ".ruby-version"
24
+ - ".travis.yml"
25
+ - Gemfile
26
+ - LICENSE
27
+ - README.md
28
+ - Rakefile
29
+ - bin/c100bit-nmax
30
+ - c100bit-nmax.gemspec
31
+ - lib/c100bit-nmax.rb
32
+ - spec/fixtures/demo1.txt
33
+ - spec/nmax_spec.rb
34
+ - spec/spec_helper.rb
35
+ homepage: ''
36
+ licenses:
37
+ - MIT
38
+ metadata: {}
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubygems_version: 3.0.6
55
+ signing_key:
56
+ specification_version: 4
57
+ summary: ''
58
+ test_files:
59
+ - spec/fixtures/demo1.txt
60
+ - spec/nmax_spec.rb
61
+ - spec/spec_helper.rb