prime_multiplication_table 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +19 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +48 -0
- data/README.md +36 -0
- data/bin/prime_multiplication_table +5 -0
- data/lib/prime_multiplication_table.rb +11 -0
- data/lib/prime_multiplication_table/atkin_sieve.rb +85 -0
- data/lib/prime_multiplication_table/cache.rb +15 -0
- data/lib/prime_multiplication_table/prime.rb +22 -0
- data/lib/prime_multiplication_table/renderer.rb +31 -0
- data/lib/prime_multiplication_table/version.rb +3 -0
- data/lib/prime_multiplication_table_cli.rb +19 -0
- data/prime_multiplication_table.gemspec +18 -0
- data/spec/lib/prime_multiplication_table/cache_spec.rb +11 -0
- data/spec/lib/prime_multiplication_table/prime_spec.rb +71 -0
- data/spec/lib/prime_multiplication_table/renderer_spec.rb +22 -0
- data/spec/prime_multiplication_table_cli_spec.rb +55 -0
- data/spec/spec_helper.rb +7 -0
- metadata +68 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: be3fd8276121c35cd3bf8f27e68e130902b7fee2
|
4
|
+
data.tar.gz: 71e1a2188bc8f8f0ab2335eac253825a54c1a11a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 82b0212d5ef41ddd16ce8a9912ade4f4a3f2e25532f717aa7054b96028b6b2f8f8af0581268b82e3f675554f13e8267399e2e2a6e543ab4dd660fbdc1ea667f5
|
7
|
+
data.tar.gz: 2a7ee9b6966c7dcbdd127b771abe79b6ee80d523a38e3edb955d8c1c83779183da21d537667cb48baa092ef9102848f8572af8ce96f051d64744de0778c65677
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# See full list of defaults here: https://github.com/bbatsov/rubocop/blob/master/config/default.yml
|
2
|
+
# To see all cops used see here: https://github.com/bbatsov/rubocop/blob/master/config/enabled.yml
|
3
|
+
|
4
|
+
AllCops:
|
5
|
+
TargetRubyVersion: 2.3
|
6
|
+
DisplayCopNames: true
|
7
|
+
|
8
|
+
LineLength:
|
9
|
+
Max: 120
|
10
|
+
|
11
|
+
Style/OpMethod:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Style/FrozenStringLiteralComment:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Metrics/BlockLength:
|
18
|
+
Exclude:
|
19
|
+
- '**/*_spec.rb'
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
prime_multiplication_table (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
ast (2.3.0)
|
10
|
+
diff-lcs (1.3)
|
11
|
+
parser (2.4.0.0)
|
12
|
+
ast (~> 2.2)
|
13
|
+
powerpack (0.1.1)
|
14
|
+
rainbow (2.2.2)
|
15
|
+
rake
|
16
|
+
rake (12.0.0)
|
17
|
+
rspec (3.5.0)
|
18
|
+
rspec-core (~> 3.5.0)
|
19
|
+
rspec-expectations (~> 3.5.0)
|
20
|
+
rspec-mocks (~> 3.5.0)
|
21
|
+
rspec-core (3.5.4)
|
22
|
+
rspec-support (~> 3.5.0)
|
23
|
+
rspec-expectations (3.5.0)
|
24
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
25
|
+
rspec-support (~> 3.5.0)
|
26
|
+
rspec-mocks (3.5.0)
|
27
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
28
|
+
rspec-support (~> 3.5.0)
|
29
|
+
rspec-support (3.5.0)
|
30
|
+
rubocop (0.48.1)
|
31
|
+
parser (>= 2.3.3.1, < 3.0)
|
32
|
+
powerpack (~> 0.1)
|
33
|
+
rainbow (>= 1.99.1, < 3.0)
|
34
|
+
ruby-progressbar (~> 1.7)
|
35
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
36
|
+
ruby-progressbar (1.8.1)
|
37
|
+
unicode-display_width (1.2.1)
|
38
|
+
|
39
|
+
PLATFORMS
|
40
|
+
ruby
|
41
|
+
|
42
|
+
DEPENDENCIES
|
43
|
+
prime_multiplication_table!
|
44
|
+
rspec
|
45
|
+
rubocop
|
46
|
+
|
47
|
+
BUNDLED WITH
|
48
|
+
1.13.6
|
data/README.md
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
### Installation
|
2
|
+
|
3
|
+
```bash
|
4
|
+
gem install prime_multiplication_table
|
5
|
+
```
|
6
|
+
|
7
|
+
### Usage
|
8
|
+
|
9
|
+
```bash
|
10
|
+
$ prime_multiplication_table
|
11
|
+
prime_multiplication_table (version: 0.1.0)
|
12
|
+
2 3 5 7 11 13 17 19 23 29
|
13
|
+
2 4 6 10 14 22 26 34 38 46 58
|
14
|
+
3 6 9 15 21 33 39 51 57 69 87
|
15
|
+
5 10 15 25 35 55 65 85 95 115 145
|
16
|
+
7 14 21 35 49 77 91 119 133 161 203
|
17
|
+
11 22 33 55 77 121 143 187 209 253 319
|
18
|
+
13 26 39 65 91 143 169 221 247 299 377
|
19
|
+
17 34 51 85 119 187 221 289 323 391 493
|
20
|
+
19 38 57 95 133 209 247 323 361 437 551
|
21
|
+
23 46 69 115 161 253 299 391 437 529 667
|
22
|
+
29 58 87 145 203 319 377 493 551 667 841
|
23
|
+
|
24
|
+
|
25
|
+
$ prime_multiplication_table 1
|
26
|
+
prime_multiplication_table (version: 0.1.0)
|
27
|
+
2
|
28
|
+
2 4
|
29
|
+
|
30
|
+
|
31
|
+
$ prime_multiplication_table 2
|
32
|
+
prime_multiplication_table (version: 0.1.0)
|
33
|
+
2 3
|
34
|
+
2 4 6
|
35
|
+
3 6 9
|
36
|
+
```
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
# This is main namespace for the library.
|
4
|
+
module PrimeMultiplicationTable
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'prime_multiplication_table/version'
|
8
|
+
require 'prime_multiplication_table/cache'
|
9
|
+
require 'prime_multiplication_table/atkin_sieve'
|
10
|
+
require 'prime_multiplication_table/prime'
|
11
|
+
require 'prime_multiplication_table/renderer'
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module PrimeMultiplicationTable
|
2
|
+
# AtkinSieve contains implementation of atkin algorithm to find prime numbers.
|
3
|
+
module AtkinSieve
|
4
|
+
def nth_prime(n)
|
5
|
+
return Cache[n] if Cache[n]
|
6
|
+
Cache.primes = compute_primes(n)
|
7
|
+
Cache[n]
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def compute_primes(count)
|
13
|
+
return Cache.primes if Cache.size > count
|
14
|
+
sieve_size = compute_sieve_size(count)
|
15
|
+
atkin_sieve(sieve_size).each_with_index.map { |v, p| p if v }.compact
|
16
|
+
end
|
17
|
+
|
18
|
+
# TODO: 52 should be replaced with algorithm to find range which cover expected count of prime numbers
|
19
|
+
#
|
20
|
+
# As we know the range 1..10**23 contains 1_925_320_391_606_803_968_923 prime numbers
|
21
|
+
# (so, the range contains 1.92 % on prime numbers)
|
22
|
+
# to find 100 prime numbers we need to create sieve 100 * (100 / 1.92) or 100 * 52
|
23
|
+
def compute_sieve_size(count)
|
24
|
+
count * 52
|
25
|
+
end
|
26
|
+
|
27
|
+
def atkin_sieve(sieve_size)
|
28
|
+
sieve = init_sieve
|
29
|
+
filter_sieve(sieve, sieve_size)
|
30
|
+
finalize_sieve(sieve, sieve_size)
|
31
|
+
sieve
|
32
|
+
end
|
33
|
+
|
34
|
+
def init_sieve
|
35
|
+
# 0, 1, 2, 3
|
36
|
+
[nil, nil, true, true]
|
37
|
+
end
|
38
|
+
|
39
|
+
def filter_sieve(sieve, sieve_size)
|
40
|
+
sieve_size_sqrt = Math.sqrt(sieve_size).floor
|
41
|
+
|
42
|
+
(1..sieve_size_sqrt).each do |x|
|
43
|
+
(1..sieve_size_sqrt).each do |y|
|
44
|
+
filter_sieve_iteration(sieve, sieve_size, x, y)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def finalize_sieve(sieve, sieve_size)
|
50
|
+
sieve_size_sqrt = Math.sqrt(sieve_size).floor
|
51
|
+
|
52
|
+
(5..sieve_size_sqrt).each do |n|
|
53
|
+
next if Cache[n] || !sieve[n]
|
54
|
+
step = n**2
|
55
|
+
(step..sieve_size).step(step) do |not_prime|
|
56
|
+
sieve[not_prime] = false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def filter_sieve_iteration(sieve, sieve_size, x, y)
|
62
|
+
x2 = x**2
|
63
|
+
y2 = y**2
|
64
|
+
|
65
|
+
apply_first_filter(sieve, sieve_size, x2, y2)
|
66
|
+
apply_second_filter(sieve, sieve_size, x2, y2)
|
67
|
+
apply_third_filter(sieve, sieve_size, x2, y2) if x > y
|
68
|
+
end
|
69
|
+
|
70
|
+
def apply_first_filter(sieve, sieve_size, x2, y2)
|
71
|
+
n = x2 * 4 + y2
|
72
|
+
sieve[n] = !sieve[n] if n <= sieve_size && (n % 12 == 1 || n % 12 == 5)
|
73
|
+
end
|
74
|
+
|
75
|
+
def apply_second_filter(sieve, sieve_size, x2, y2)
|
76
|
+
n = x2 * 4 + y2 - x2
|
77
|
+
sieve[n] = !sieve[n] if n <= sieve_size && n % 12 == 7
|
78
|
+
end
|
79
|
+
|
80
|
+
def apply_third_filter(sieve, sieve_size, x2, y2)
|
81
|
+
n = x2 * 4 + y2 - x2 - 2 * y2
|
82
|
+
sieve[n] = !sieve[n] if n <= sieve_size && n % 12 == 11
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module PrimeMultiplicationTable
|
2
|
+
# Cache contains already calculated prime numbers.
|
3
|
+
module Cache
|
4
|
+
class << self
|
5
|
+
extend Forwardable
|
6
|
+
attr_writer :primes
|
7
|
+
|
8
|
+
def_delegators :primes, :[], :[]=, :last, :size
|
9
|
+
|
10
|
+
def primes
|
11
|
+
@primes ||= [2, 3]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module PrimeMultiplicationTable
|
2
|
+
# Prime contains implementation of comparable prime number.
|
3
|
+
class Prime
|
4
|
+
include Comparable
|
5
|
+
include AtkinSieve
|
6
|
+
|
7
|
+
attr_reader :value
|
8
|
+
|
9
|
+
def initialize(position)
|
10
|
+
@position = position
|
11
|
+
@value = nth_prime(@position)
|
12
|
+
end
|
13
|
+
|
14
|
+
def succ
|
15
|
+
self.class.new(@position + 1)
|
16
|
+
end
|
17
|
+
|
18
|
+
def <=>(other)
|
19
|
+
@value <=> other.value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module PrimeMultiplicationTable
|
2
|
+
# Renderer contains implementation of table renderer functionality.
|
3
|
+
class Renderer
|
4
|
+
def initialize(primes_array)
|
5
|
+
@primes_array = primes_array
|
6
|
+
end
|
7
|
+
|
8
|
+
def render
|
9
|
+
matrix.map { |r| render_row(r) }.join("\n")
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def render_row(row_array)
|
15
|
+
row_array.each_with_index.map { |c, i| c.to_s.rjust(cell_size(i)) }.join(' ')
|
16
|
+
end
|
17
|
+
|
18
|
+
def matrix
|
19
|
+
@matrix ||= [[nil] + @primes_array] + @primes_array.map do |prime_x|
|
20
|
+
@primes_array.each_with_index.each_with_object([]) do |(prime_y, index), result|
|
21
|
+
result << prime_x if index.to_i.zero?
|
22
|
+
result << prime_x * prime_y
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def cell_size(cell_index)
|
28
|
+
matrix.last[cell_index].to_s.size
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Command line interface of prime_multiplication_table gem.
|
2
|
+
module PrimeMultiplicationTableCLI
|
3
|
+
DEFAULT_TABLE_SIZE = 10
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def run(args)
|
7
|
+
puts "prime_multiplication_table (version: #{PrimeMultiplicationTable::VERSION})"
|
8
|
+
size = parse_table_size_argument(args)
|
9
|
+
prime_class = PrimeMultiplicationTable::Prime
|
10
|
+
array = (prime_class.new(0)...prime_class.new(size)).map(&:value)
|
11
|
+
puts PrimeMultiplicationTable::Renderer.new(array).render
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_table_size_argument(args)
|
15
|
+
size = args.first.to_i
|
16
|
+
size.positive? ? size : DEFAULT_TABLE_SIZE
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.expand_path('../lib/prime_multiplication_table/version', __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.name = 'prime_multiplication_table'
|
5
|
+
gem.version = PrimeMultiplicationTable::VERSION
|
6
|
+
gem.date = '2017-05-08'
|
7
|
+
gem.summary = 'Prime multiplication table printer'
|
8
|
+
gem.description = 'Ruby gem for printing prime multiplication tables'
|
9
|
+
gem.authors = ['Konstantin Lynda']
|
10
|
+
gem.email = 'knlynda@gmail.com'
|
11
|
+
gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
12
|
+
gem.test_files = gem.files.grep(%r{^spec/})
|
13
|
+
gem.require_paths = ['lib']
|
14
|
+
gem.bindir = 'bin'
|
15
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
16
|
+
gem.homepage = 'http://rubygems.org/gems/prime_multiplication_table'
|
17
|
+
gem.license = 'MIT'
|
18
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe PrimeMultiplicationTable::Cache do
|
4
|
+
it { is_expected.to respond_to :primes, :primes=, :[], :[]=, :last, :size }
|
5
|
+
|
6
|
+
describe '.primes' do
|
7
|
+
subject { described_class.primes }
|
8
|
+
|
9
|
+
it { is_expected.to eql [2, 3] }
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe PrimeMultiplicationTable::Prime do
|
4
|
+
describe '#succ' do
|
5
|
+
subject { described_class.new(position) }
|
6
|
+
|
7
|
+
context 'when position is zero' do
|
8
|
+
let(:position) { 0 }
|
9
|
+
it { expect(subject.value).to eql 2 }
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'when position is 1' do
|
13
|
+
let(:position) { 1 }
|
14
|
+
it { expect(subject.value).to eql 3 }
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when position is 499' do
|
18
|
+
let(:position) { 499 }
|
19
|
+
it { expect(subject.value).to eql 3571 }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when position is -1' do
|
23
|
+
let(:position) { -1 }
|
24
|
+
it { expect(subject.value).to eql PrimeMultiplicationTable::Cache[-1] }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when position is -500_000' do
|
28
|
+
let(:position) { -500_000 }
|
29
|
+
it { expect(subject.value).to be_nil }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#nth_prime' do
|
34
|
+
subject { described_class.new(position).nth_prime(new_position) }
|
35
|
+
|
36
|
+
context 'when position is zero and new_position is 1' do
|
37
|
+
let(:position) { 0 }
|
38
|
+
let(:new_position) { 1 }
|
39
|
+
|
40
|
+
it { is_expected.to eql 3 }
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when position is zero and new_position is zero' do
|
44
|
+
let(:position) { 0 }
|
45
|
+
let(:new_position) { 0 }
|
46
|
+
|
47
|
+
it { is_expected.to eql 2 }
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'when position is zero and new_position is 499' do
|
51
|
+
let(:position) { 0 }
|
52
|
+
let(:new_position) { 499 }
|
53
|
+
|
54
|
+
it { is_expected.to eql 3571 }
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'when position is zero and new_position is -1' do
|
58
|
+
let(:position) { 0 }
|
59
|
+
let(:new_position) { -1 }
|
60
|
+
|
61
|
+
it { is_expected.to eql PrimeMultiplicationTable::Cache[-1] }
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'when position is zero and new_position is -500_000' do
|
65
|
+
let(:position) { 0 }
|
66
|
+
let(:new_position) { -500_000 }
|
67
|
+
|
68
|
+
it { is_expected.to be_nil }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe PrimeMultiplicationTable::Renderer do
|
4
|
+
describe '#render' do
|
5
|
+
subject { described_class.new(table_basis).render }
|
6
|
+
|
7
|
+
context 'when table_basis is empty' do
|
8
|
+
let(:table_basis) { [] }
|
9
|
+
it { is_expected.to be_empty }
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'when table_basis is not empty' do
|
13
|
+
let(:table_basis) { [1, 2, 3] }
|
14
|
+
it { is_expected.to eql " 1 2 3\n1 1 2 3\n2 2 4 6\n3 3 6 9" }
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when table_basis includes big and small numbers' do
|
18
|
+
let(:table_basis) { [11, 2, 33] }
|
19
|
+
it { is_expected.to eql " 11 2 33\n11 121 22 363\n 2 22 4 66\n33 363 66 1089" }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe PrimeMultiplicationTableCLI do
|
4
|
+
describe '.run' do
|
5
|
+
subject(:run) { described_class.run(args) }
|
6
|
+
let(:renderer) { double }
|
7
|
+
|
8
|
+
before do
|
9
|
+
expect(PrimeMultiplicationTable::Renderer).to receive(:new).with(renderer_args).and_return(renderer)
|
10
|
+
expect(renderer).to receive(:render)
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when args is [0]' do
|
14
|
+
let(:args) { [0] }
|
15
|
+
let(:renderer_args) { [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] }
|
16
|
+
|
17
|
+
it { run }
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when args is [1]' do
|
21
|
+
let(:args) { [1] }
|
22
|
+
let(:renderer_args) { [2] }
|
23
|
+
|
24
|
+
it { run }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when args is [1]' do
|
28
|
+
let(:args) { [1] }
|
29
|
+
let(:renderer_args) { [2] }
|
30
|
+
|
31
|
+
it { run }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'when args is [5]' do
|
35
|
+
let(:args) { [5] }
|
36
|
+
let(:renderer_args) { [2, 3, 5, 7, 11] }
|
37
|
+
|
38
|
+
it { run }
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when args is [-1]' do
|
42
|
+
let(:args) { [-1] }
|
43
|
+
let(:renderer_args) { [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] }
|
44
|
+
|
45
|
+
it { run }
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when args is ["one"]' do
|
49
|
+
let(:args) { ['one'] }
|
50
|
+
let(:renderer_args) { [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] }
|
51
|
+
|
52
|
+
it { run }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: prime_multiplication_table
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Konstantin Lynda
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-05-08 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Ruby gem for printing prime multiplication tables
|
14
|
+
email: knlynda@gmail.com
|
15
|
+
executables:
|
16
|
+
- prime_multiplication_table
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".gitignore"
|
21
|
+
- ".rubocop.yml"
|
22
|
+
- Gemfile
|
23
|
+
- Gemfile.lock
|
24
|
+
- README.md
|
25
|
+
- bin/prime_multiplication_table
|
26
|
+
- lib/prime_multiplication_table.rb
|
27
|
+
- lib/prime_multiplication_table/atkin_sieve.rb
|
28
|
+
- lib/prime_multiplication_table/cache.rb
|
29
|
+
- lib/prime_multiplication_table/prime.rb
|
30
|
+
- lib/prime_multiplication_table/renderer.rb
|
31
|
+
- lib/prime_multiplication_table/version.rb
|
32
|
+
- lib/prime_multiplication_table_cli.rb
|
33
|
+
- prime_multiplication_table.gemspec
|
34
|
+
- spec/lib/prime_multiplication_table/cache_spec.rb
|
35
|
+
- spec/lib/prime_multiplication_table/prime_spec.rb
|
36
|
+
- spec/lib/prime_multiplication_table/renderer_spec.rb
|
37
|
+
- spec/prime_multiplication_table_cli_spec.rb
|
38
|
+
- spec/spec_helper.rb
|
39
|
+
homepage: http://rubygems.org/gems/prime_multiplication_table
|
40
|
+
licenses:
|
41
|
+
- MIT
|
42
|
+
metadata: {}
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
requirements: []
|
58
|
+
rubyforge_project:
|
59
|
+
rubygems_version: 2.5.1
|
60
|
+
signing_key:
|
61
|
+
specification_version: 4
|
62
|
+
summary: Prime multiplication table printer
|
63
|
+
test_files:
|
64
|
+
- spec/lib/prime_multiplication_table/cache_spec.rb
|
65
|
+
- spec/lib/prime_multiplication_table/prime_spec.rb
|
66
|
+
- spec/lib/prime_multiplication_table/renderer_spec.rb
|
67
|
+
- spec/prime_multiplication_table_cli_spec.rb
|
68
|
+
- spec/spec_helper.rb
|