eulerplate 0.0.1 → 0.0.2
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/6-sum-square-difference/sum_square_difference.rb +3 -0
- data/6-sum-square-difference/sum_square_difference_spec.rb +26 -0
- data/README.md +26 -10
- data/Rakefile +6 -0
- data/eulerplate.gemspec +2 -0
- data/features/problem_bootstrap.feature +35 -0
- data/features/support/env.rb +1 -0
- data/lib/eulerplate/cli.rb +6 -9
- data/lib/eulerplate/generators/problem_kit.rb +25 -0
- data/lib/eulerplate/generators/templates/class_file.rb.tt +3 -0
- data/lib/eulerplate/generators/templates/spec_file.rb.tt +11 -0
- data/lib/eulerplate/problems.rb +5 -19
- data/lib/eulerplate/version.rb +1 -1
- data/lib/eulerplate.rb +1 -1
- data/spec/problems_spec.rb +6 -6
- metadata +40 -9
- data/spec/folder_creator_spec.rb +0 -27
- data/spec/temp/example_test.rb +0 -18
- data/spec/temp/special_pythagorean_triplet.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9cf6ee751d24ac9d62ba6a0799b86749c1ba62db
|
4
|
+
data.tar.gz: baa38ffea524ff0104a79c2fdc08c87998a0a7bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2213455f914417175555799410a708444890115919326c69e82e816b89871c11d485d57ea9b8705f9cdc80e8cc4c513ff79d6188581f7f0e3459d03b2b1a336
|
7
|
+
data.tar.gz: b7fdd605325c451fd802fafbf48678515ab09bf6b2d524826872dc3fb45f739b3f9a78fbce3cf38401a8bde3d6d0b536ac9b48b1e214fa26b0abfd2fbe188910
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# PROBLEM 6: Sum square difference
|
2
|
+
# https://projecteuler.net/problem=6
|
3
|
+
#
|
4
|
+
# The sum of the squares of the first ten natural numbers is,
|
5
|
+
# 1^2 + 2^2 + ... + 10^2 = 385
|
6
|
+
# The square of the sum of the first ten natural numbers is,
|
7
|
+
# (1 + 2 + ... + 10)^2 = 55^2 = 3025
|
8
|
+
# Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 − 385 = 2640.
|
9
|
+
# Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
|
10
|
+
#
|
11
|
+
# WRITE YOUR TESTS!
|
12
|
+
|
13
|
+
|
14
|
+
require_relative 'sum_square_difference'
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
require_relative 'sum_square_difference'
|
19
|
+
|
20
|
+
describe SumSquareDifference do
|
21
|
+
it 'verifies the example' do
|
22
|
+
skip 'write a test using the example given above'
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'helps you find the solution'
|
26
|
+
end
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# Eulerplate
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
This is a fairly simple gem.
|
3
|
+
A command line gem for creating kata boilerplate—specs and folders—for Project Euler problems.
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
@@ -14,17 +12,35 @@ To create a folder in the present working directory just type:
|
|
14
12
|
|
15
13
|
$ eulerplate new PROBLEM_NUMBER
|
16
14
|
|
17
|
-
for Problem
|
15
|
+
for Problem 3, you will get a new directory:
|
18
16
|
|
19
|
-
- **
|
17
|
+
- **3-largest-prime-factor**
|
20
18
|
|
21
19
|
And two files in that directory:
|
22
20
|
|
23
|
-
- **
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
- **largest_prime_factor_spec.rb** with the code:
|
22
|
+
```ruby
|
23
|
+
# PROBLEM 3: Largest prime factor
|
24
|
+
# https://projecteuler.net/problem=3
|
25
|
+
#
|
26
|
+
# The prime factors of 13195 are 5, 7, 13 and 29.
|
27
|
+
# What is the largest prime factor of the number 600851475143 ?
|
28
|
+
#
|
29
|
+
# WRITE YOUR TESTS!
|
30
|
+
require_relative 'largest_prime_factor'
|
31
|
+
|
32
|
+
describe LargestPrimeFactor do
|
33
|
+
it 'verifies the example' do
|
34
|
+
skip 'write code to verify the example'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
```
|
38
|
+
- **largest_product_in_a_series_spec.rb** with the code:
|
39
|
+
```ruby
|
40
|
+
class LargestPrimeFactor
|
41
|
+
|
42
|
+
end
|
43
|
+
```
|
28
44
|
|
29
45
|
## Contributing
|
30
46
|
|
data/Rakefile
CHANGED
data/eulerplate.gemspec
CHANGED
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
23
|
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "cucumber"
|
25
|
+
spec.add_development_dependency "aruba"
|
24
26
|
spec.add_runtime_dependency "nokogiri"
|
25
27
|
spec.add_runtime_dependency "thor"
|
26
28
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Feature: Generating problem bootstraps
|
2
|
+
In order to easily create Euler problems
|
3
|
+
As a User
|
4
|
+
I want eulerplate to create folders and specs
|
5
|
+
|
6
|
+
Scenario: Folders
|
7
|
+
When I run `eulerplate new 3`
|
8
|
+
Then the following files should exist:
|
9
|
+
| 3-largest-prime-factor/largest_prime_factor.rb |
|
10
|
+
Then the file "3-largest-prime-factor/largest_prime_factor.rb" should contain:
|
11
|
+
"""
|
12
|
+
class LargestPrimeFactor
|
13
|
+
|
14
|
+
end
|
15
|
+
"""
|
16
|
+
Then the file "3-largest-prime-factor/largest_prime_factor_spec.rb" should contain:
|
17
|
+
"""
|
18
|
+
# PROBLEM 3: Largest prime factor
|
19
|
+
# https://projecteuler.net/problem=3
|
20
|
+
#
|
21
|
+
# The prime factors of 13195 are 5, 7, 13 and 29.
|
22
|
+
# What is the largest prime factor of the number 600851475143 ?
|
23
|
+
#
|
24
|
+
# WRITE YOUR TESTS!
|
25
|
+
|
26
|
+
require_relative 'largest_prime_factor'
|
27
|
+
|
28
|
+
describe LargestPrimeFactor do
|
29
|
+
it 'verifies the example' do
|
30
|
+
skip 'write a test using the example given above'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'leads you toward the solution'
|
34
|
+
end
|
35
|
+
"""
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'aruba/cucumber'
|
data/lib/eulerplate/cli.rb
CHANGED
@@ -5,15 +5,12 @@ module Eulerplate
|
|
5
5
|
|
6
6
|
desc 'new NUMBER', 'creates a new file structure for problem NUMBER'
|
7
7
|
def new(number)
|
8
|
-
problem = Eulerplate::
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
say "for Problem #{ problem.number }: #{ problem.name }"
|
15
|
-
rescue
|
16
|
-
say "HEY: That folder already exists!", :bold
|
8
|
+
problem = Eulerplate::Problems.get(number)
|
9
|
+
Eulerplate::Generators::ProblemKit.start([problem])
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.source_root
|
13
|
+
File.dirname(__FILE__) + "/templates"
|
17
14
|
end
|
18
15
|
|
19
16
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Eulerplate
|
2
|
+
module Generators
|
3
|
+
class ProblemKit < Thor::Group
|
4
|
+
include Thor::Actions
|
5
|
+
|
6
|
+
argument :problem
|
7
|
+
|
8
|
+
def self.source_root
|
9
|
+
File.dirname(__FILE__) + "/templates"
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_folder
|
13
|
+
empty_directory(problem.folder_name)
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_class_file
|
17
|
+
template("class_file.rb", "#{problem.folder_name}/#{problem.class_file_name}")
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_spec_file
|
21
|
+
template("spec_file.rb", "#{problem.folder_name}/#{problem.spec_file_name}")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/eulerplate/problems.rb
CHANGED
@@ -3,7 +3,7 @@ require 'nokogiri'
|
|
3
3
|
|
4
4
|
module Eulerplate
|
5
5
|
class Problems
|
6
|
-
def
|
6
|
+
def self.get(number)
|
7
7
|
page = Nokogiri::HTML(open("https://projecteuler.net/problem=#{number}"))
|
8
8
|
name = page.css('h2')[0].text
|
9
9
|
number = page.css('#problem_info')[0].text.scan(/\d+/)[0].to_i
|
@@ -30,11 +30,11 @@ module Eulerplate
|
|
30
30
|
result.join("-")
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def spec_file_name
|
34
34
|
snake_name + "_spec.rb"
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
37
|
+
def class_file_name
|
38
38
|
snake_name + ".rb"
|
39
39
|
end
|
40
40
|
|
@@ -44,7 +44,7 @@ module Eulerplate
|
|
44
44
|
result.join("_")
|
45
45
|
end
|
46
46
|
|
47
|
-
def
|
47
|
+
def spec_description
|
48
48
|
header = []
|
49
49
|
header << "# PROBLEM #{number}: #{name}"
|
50
50
|
header << "# https://projecteuler.net/problem=#{number}"
|
@@ -52,21 +52,7 @@ module Eulerplate
|
|
52
52
|
header << problem.lines.map { |line| "# #{line}" }.join
|
53
53
|
header << "#"
|
54
54
|
header << "# WRITE YOUR TESTS!"
|
55
|
-
header
|
56
|
-
header << "require_relative '#{snake_name}'"
|
57
|
-
header << "\n"
|
58
|
-
header << "describe #{class_name} do"
|
59
|
-
header << " it 'verifies the example' do"
|
60
|
-
header << " skip"
|
61
|
-
header << " end"
|
62
|
-
header << "end"
|
63
|
-
end
|
64
|
-
|
65
|
-
def ruby_body
|
66
|
-
body = []
|
67
|
-
body << "class #{class_name}"
|
68
|
-
body << ""
|
69
|
-
body << "end"
|
55
|
+
header.join("\n")
|
70
56
|
end
|
71
57
|
|
72
58
|
def class_name
|
data/lib/eulerplate/version.rb
CHANGED
data/lib/eulerplate.rb
CHANGED
data/spec/problems_spec.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Eulerplate::Problems do
|
4
|
-
let (:
|
4
|
+
let (:problems) { Eulerplate::Problems }
|
5
5
|
|
6
6
|
it 'knows the problem names' do
|
7
|
-
name =
|
7
|
+
name = problems.get(9).name
|
8
8
|
expect(name).to eq "Special Pythagorean triplet"
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'knows the problem numbers' do
|
12
|
-
number =
|
12
|
+
number = problems.get(15).number
|
13
13
|
expect(number).to eq 15
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'knows the problem content' do
|
17
|
-
problem =
|
17
|
+
problem = problems.get(9).problem
|
18
18
|
expect(problem).to eq ['A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,',
|
19
19
|
'a^2 + b^2 = c^2',
|
20
20
|
'For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.',
|
@@ -25,12 +25,12 @@ describe Eulerplate::Problems do
|
|
25
25
|
|
26
26
|
describe '#class_name' do
|
27
27
|
it 'strips the class name of special symbols' do
|
28
|
-
class_name =
|
28
|
+
class_name = problems.get(43).class_name
|
29
29
|
expect(class_name).to eq "SubstringDivisibility"
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'knows the class name' do
|
33
|
-
class_name =
|
33
|
+
class_name = problems.get(7).class_name
|
34
34
|
expect(class_name).to eq "Euler10001stPrime"
|
35
35
|
end
|
36
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eulerplate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kit Langton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: cucumber
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: aruba
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: nokogiri
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,23 +119,27 @@ files:
|
|
91
119
|
- ".gitignore"
|
92
120
|
- ".rspec"
|
93
121
|
- ".travis.yml"
|
122
|
+
- 6-sum-square-difference/sum_square_difference.rb
|
123
|
+
- 6-sum-square-difference/sum_square_difference_spec.rb
|
94
124
|
- Gemfile
|
95
125
|
- LICENSE.txt
|
96
126
|
- README.md
|
97
127
|
- Rakefile
|
98
128
|
- bin/eulerplate
|
99
129
|
- eulerplate.gemspec
|
130
|
+
- features/problem_bootstrap.feature
|
131
|
+
- features/support/env.rb
|
100
132
|
- lib/eulerplate.rb
|
101
133
|
- lib/eulerplate/cli.rb
|
102
134
|
- lib/eulerplate/folder_creator.rb
|
135
|
+
- lib/eulerplate/generators/problem_kit.rb
|
136
|
+
- lib/eulerplate/generators/templates/class_file.rb.tt
|
137
|
+
- lib/eulerplate/generators/templates/spec_file.rb.tt
|
103
138
|
- lib/eulerplate/problems.rb
|
104
139
|
- lib/eulerplate/version.rb
|
105
140
|
- spec/eulerplate_spec.rb
|
106
|
-
- spec/folder_creator_spec.rb
|
107
141
|
- spec/problems_spec.rb
|
108
142
|
- spec/spec_helper.rb
|
109
|
-
- spec/temp/example_test.rb
|
110
|
-
- spec/temp/special_pythagorean_triplet.rb
|
111
143
|
homepage: https://github.com/sudokill/eulerplate
|
112
144
|
licenses:
|
113
145
|
- MIT
|
@@ -128,14 +160,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
160
|
version: '0'
|
129
161
|
requirements: []
|
130
162
|
rubyforge_project:
|
131
|
-
rubygems_version: 2.4.
|
163
|
+
rubygems_version: 2.4.1
|
132
164
|
signing_key:
|
133
165
|
specification_version: 4
|
134
166
|
summary: API and command line tool for Project Euler
|
135
167
|
test_files:
|
168
|
+
- features/problem_bootstrap.feature
|
169
|
+
- features/support/env.rb
|
136
170
|
- spec/eulerplate_spec.rb
|
137
|
-
- spec/folder_creator_spec.rb
|
138
171
|
- spec/problems_spec.rb
|
139
172
|
- spec/spec_helper.rb
|
140
|
-
- spec/temp/example_test.rb
|
141
|
-
- spec/temp/special_pythagorean_triplet.rb
|
data/spec/folder_creator_spec.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'tmpdir'
|
3
|
-
|
4
|
-
describe Eulerplate::FolderCreator do
|
5
|
-
it 'creates a folder for a problem' do
|
6
|
-
Dir.mktmpdir do |dir|
|
7
|
-
test_dir = Dir.new(dir)
|
8
|
-
fc = Eulerplate::FolderCreator.new(dir: test_dir)
|
9
|
-
fc.for_problem(9)
|
10
|
-
expect(test_dir.to_a).to include "9-special-pythagorean-triplet"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'creates a spec file for the problem' do
|
15
|
-
Dir.mktmpdir do |dir|
|
16
|
-
test_dir = Dir.new(dir)
|
17
|
-
test_file = File.open(File.join(__dir__,"/temp","/example_test.rb")).read
|
18
|
-
example_ruby_file = File.open(File.join(__dir__,"/temp","/special_pythagorean_triplet.rb")).read
|
19
|
-
fc = Eulerplate::FolderCreator.new(dir: test_dir)
|
20
|
-
problem = fc.for_problem(9)
|
21
|
-
spec_file = File.read(File.join(dir, problem.folder_name, problem.test_name))
|
22
|
-
ruby_file = File.read(File.join(dir, problem.folder_name, problem.ruby_file_name))
|
23
|
-
expect(spec_file).to eq test_file
|
24
|
-
expect(ruby_file).to eq example_ruby_file
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/spec/temp/example_test.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# PROBLEM 9: Special Pythagorean triplet
|
2
|
-
# https://projecteuler.net/problem=9
|
3
|
-
#
|
4
|
-
# A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
|
5
|
-
# a^2 + b^2 = c^2
|
6
|
-
# For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.
|
7
|
-
# There exists exactly one Pythagorean triplet for which a + b + c = 1000.
|
8
|
-
# Find the product abc.
|
9
|
-
#
|
10
|
-
# WRITE YOUR TESTS!
|
11
|
-
|
12
|
-
require_relative 'special_pythagorean_triplet'
|
13
|
-
|
14
|
-
describe SpecialPythagoreanTriplet do
|
15
|
-
it 'verifies the example' do
|
16
|
-
skip
|
17
|
-
end
|
18
|
-
end
|