euler-manager 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/bin/euler +15 -5
- data/config/config.rb +3 -1
- data/example/1/haskell/1.hs +3 -0
- data/example/12/README.md +20 -0
- data/example/12/haskell/12.hs +3 -0
- data/example/Eulerfile.rb +19 -11
- data/example/lib/Euler.hs +1 -0
- data/languages/haskell.rb +25 -0
- data/languages/julia.rb +21 -0
- data/languages/python.rb +8 -1
- data/lib/euler/problem.rb +6 -2
- data/lib/euler/version.rb +1 -1
- data/spec/euler_spec.rb +2 -1
- data/templates/haskell.hs +3 -0
- data/templates/julia.jl +4 -0
- metadata +11 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5336f87fdb342e65419267358213b8b70f9b751d
|
4
|
+
data.tar.gz: 621f2862aaeb20504e3707585327f3fffe637fa4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ea6fa3e120c4ff157adcf9d6f4d58ee3e8aa271060b4f2cc74cf5e5da2c2dafca3fe97ee5f28a818693bfa583d87e84ad461ed2c948ec1cfe45fc7a9e304ab7
|
7
|
+
data.tar.gz: ef1fdb96086f2f9770445af0594cb7a0b60147165743902f8da527a4a40a8e5e153a617217ae28c955f0c24e8d28d1815c26f61fdcd8ddf03d464b6aaa64fc81
|
data/README.md
CHANGED
@@ -52,11 +52,13 @@ solution for problem number 1 then you can just run `$ euelr run` from `1/ruby`
|
|
52
52
|
## Supported Programming Languages
|
53
53
|
|
54
54
|
- coffeescript
|
55
|
+
- haskell
|
55
56
|
- javascript
|
56
57
|
- java
|
57
58
|
- python
|
58
59
|
- ruby
|
59
60
|
- scala
|
61
|
+
- julia
|
60
62
|
|
61
63
|
## Configuring Euler Manager
|
62
64
|
|
data/bin/euler
CHANGED
@@ -83,9 +83,15 @@ command :test_all do |c|
|
|
83
83
|
print "All TESTS PASSED".bold.on_green
|
84
84
|
puts " ".bold.on_green
|
85
85
|
else
|
86
|
-
|
87
|
-
|
88
|
-
|
86
|
+
if failures.length == 1
|
87
|
+
print " ".bold.on_red
|
88
|
+
print "THERE WAS A FAILURE".bold.on_red
|
89
|
+
print " ".bold.on_red
|
90
|
+
else
|
91
|
+
print " ".bold.on_red
|
92
|
+
print "THERE WERE #{failures.length} FAILURES".bold.on_red
|
93
|
+
print " ".bold.on_red
|
94
|
+
end
|
89
95
|
failures.each do |failure|
|
90
96
|
puts
|
91
97
|
puts "#{failure.problem.to_s} (#{failure.language})".bold
|
@@ -107,8 +113,12 @@ command :new do |c|
|
|
107
113
|
problem_id = args.shift
|
108
114
|
language = args.shift
|
109
115
|
|
110
|
-
|
111
|
-
|
116
|
+
begin
|
117
|
+
solution = Euler::Solution.new(problem_id, language)
|
118
|
+
problem = solution.problem
|
119
|
+
rescue
|
120
|
+
|
121
|
+
end
|
112
122
|
|
113
123
|
solution.init
|
114
124
|
|
data/config/config.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# [Highly divisible triangular number](http://projecteuler.net/problem=12)
|
2
|
+
|
3
|
+
The sequence of triangle numbers is generated by adding the natural numbers. So the 7<sup>th</sup> triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
|
4
|
+
|
5
|
+
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
|
6
|
+
|
7
|
+
Let us list the factors of the first seven triangle numbers:
|
8
|
+
|
9
|
+
> ** 1** : 1
|
10
|
+
> ** 3** : 1,3
|
11
|
+
> ** 6** : 1,2,3,6
|
12
|
+
> **10** : 1,2,5,10
|
13
|
+
> **15** : 1,3,5,15
|
14
|
+
> **21** : 1,3,7,21
|
15
|
+
> **28** : 1,2,4,7,14,28
|
16
|
+
|
17
|
+
We can see that 28 is the first triangle number to have over five divisors.
|
18
|
+
|
19
|
+
What is the value of the first triangle number to have over five hundred divisors?
|
20
|
+
|
data/example/Eulerfile.rb
CHANGED
@@ -67,22 +67,30 @@ end
|
|
67
67
|
|
68
68
|
Euler.register_language('python', Class.new do
|
69
69
|
|
70
|
-
#
|
70
|
+
# Run the solution
|
71
71
|
def run solution
|
72
|
-
`python #{solution
|
72
|
+
`python #{file_path(solution)}`
|
73
73
|
end
|
74
74
|
|
75
|
-
#
|
76
|
-
# method is not required
|
77
|
-
#
|
78
|
-
# This example symlinks lib/euler.py into the solution's directory and then
|
79
|
-
# writes a base file into the directory.
|
75
|
+
# Copy the template into the solution's directory
|
80
76
|
def init solution
|
81
|
-
|
77
|
+
rel_euler_root = solution.dir.gsub(Euler.root, '').gsub(/\/[^\/]+/, '/..').sub(/^\//, '')
|
78
|
+
old_dir = Dir.pwd
|
82
79
|
|
83
|
-
|
84
|
-
|
85
|
-
|
80
|
+
Dir.chdir solution.dir
|
81
|
+
|
82
|
+
FileUtils.symlink("#{rel_euler_root}/lib/euler.py", "#{solution.dir}/euler.py")
|
83
|
+
|
84
|
+
Dir.chdir old_dir
|
85
|
+
|
86
|
+
FileUtils.touch(file_path(solution))
|
86
87
|
end
|
87
88
|
|
89
|
+
private
|
90
|
+
|
91
|
+
def file_path solution
|
92
|
+
"#{solution.dir}/#{solution.problem.id}.py"
|
93
|
+
end
|
94
|
+
|
88
95
|
end)
|
96
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
module Euler where
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Euler.register_language('haskell', Class.new do
|
2
|
+
|
3
|
+
# Run the solution
|
4
|
+
def run solution
|
5
|
+
`runhaskell -i#{Euler.root}/lib #{file_path(solution)}`
|
6
|
+
end
|
7
|
+
|
8
|
+
# Copy the template into the solution's directory
|
9
|
+
def init solution
|
10
|
+
FileUtils.cp(template_path, file_path(solution))
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
# Returns the path to the solution
|
16
|
+
def file_path solution
|
17
|
+
"#{solution.dir}/#{solution.problem.id}.hs"
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns the path to the template
|
21
|
+
def template_path
|
22
|
+
"#{File.dirname(__FILE__)}/../templates/haskell.hs"
|
23
|
+
end
|
24
|
+
|
25
|
+
end)
|
data/languages/julia.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Euler.register_language('julia', Class.new do
|
2
|
+
#Run the solution
|
3
|
+
def run(solution)
|
4
|
+
`julia #{file_path(solution)}`
|
5
|
+
end
|
6
|
+
|
7
|
+
#Copy the template into the solution's directory
|
8
|
+
def init(solution)
|
9
|
+
FileUtils.symlink("#{Euler.root}/lib/euler.jl", "#{solution.dir}/euler.jl")
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
#Returns the path of the solution
|
14
|
+
def file_path(solution)
|
15
|
+
"#{solution.dir}/#{solution.problem.id}.jl"
|
16
|
+
end
|
17
|
+
|
18
|
+
def template_path
|
19
|
+
"#{File.dirname(__FILE__)}/../templates/julia.jl"
|
20
|
+
end
|
21
|
+
end)
|
data/languages/python.rb
CHANGED
@@ -7,7 +7,14 @@ Euler.register_language('python', Class.new do
|
|
7
7
|
|
8
8
|
# Copy the template into the solution's directory
|
9
9
|
def init solution
|
10
|
-
|
10
|
+
rel_euler_root = solution.dir.gsub(Euler.root, '').gsub(/\/[^\/]+/, '/..').sub(/^\//, '')
|
11
|
+
old_dir = Dir.pwd
|
12
|
+
|
13
|
+
Dir.chdir solution.dir
|
14
|
+
|
15
|
+
FileUtils.symlink("#{rel_euler_root}/lib/euler.py", "#{solution.dir}/euler.py")
|
16
|
+
|
17
|
+
Dir.chdir old_dir
|
11
18
|
|
12
19
|
FileUtils.cp(template_path, file_path(solution))
|
13
20
|
end
|
data/lib/euler/problem.rb
CHANGED
@@ -9,8 +9,12 @@ module Euler
|
|
9
9
|
# Returns the problem with the given id.
|
10
10
|
def self.find id
|
11
11
|
problem_spec_file = "#{Euler.problems_dir}/#{id}.yml"
|
12
|
-
|
13
|
-
|
12
|
+
begin
|
13
|
+
problem_spec = YAML.load_file(problem_spec_file)
|
14
|
+
rescue
|
15
|
+
raise "No problem with id '#{id}' found"
|
16
|
+
end
|
17
|
+
Problem.new(problem_spec)
|
14
18
|
end
|
15
19
|
|
16
20
|
attr_reader :id, :name, :url
|
data/lib/euler/version.rb
CHANGED
data/spec/euler_spec.rb
CHANGED
@@ -26,10 +26,11 @@ describe Euler do
|
|
26
26
|
|
27
27
|
it "should have a few languages preregistered" do
|
28
28
|
Euler.get_language('coffeescript').should be_truthy
|
29
|
+
Euler.get_language('haskell').should be_truthy
|
29
30
|
Euler.get_language('java').should be_truthy
|
30
31
|
Euler.get_language('javascript').should be_truthy
|
31
32
|
Euler.get_language('python').should be_truthy
|
32
|
-
Euler.get_language('
|
33
|
+
Euler.get_language('ruby').should be_truthy
|
33
34
|
Euler.get_language('scala').should be_truthy
|
34
35
|
end
|
35
36
|
|
data/templates/julia.jl
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: euler-manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Yaworsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07
|
11
|
+
date: 2014-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -753,8 +753,11 @@ files:
|
|
753
753
|
- euler-manager.gemspec
|
754
754
|
- euler-manager.sublime-project
|
755
755
|
- example/1/README.md
|
756
|
+
- example/1/haskell/1.hs
|
756
757
|
- example/1/ruby/1.rb
|
757
758
|
- example/1/scala/1.scala
|
759
|
+
- example/12/README.md
|
760
|
+
- example/12/haskell/12.hs
|
758
761
|
- example/15/README.md
|
759
762
|
- example/15/python/15.py
|
760
763
|
- example/15/python/euler.py
|
@@ -763,12 +766,15 @@ files:
|
|
763
766
|
- example/2/python/euler.py
|
764
767
|
- example/Eulerfile.rb
|
765
768
|
- example/README.md
|
769
|
+
- example/lib/Euler.hs
|
766
770
|
- example/lib/euler.py
|
767
771
|
- example/lib/euler.rb
|
768
772
|
- example/lib/euler.scala
|
769
773
|
- languages/coffeescript.rb
|
774
|
+
- languages/haskell.rb
|
770
775
|
- languages/java.rb
|
771
776
|
- languages/javascript.rb
|
777
|
+
- languages/julia.rb
|
772
778
|
- languages/python.rb
|
773
779
|
- languages/ruby.rb
|
774
780
|
- languages/scala.rb
|
@@ -785,8 +791,10 @@ files:
|
|
785
791
|
- spec/spec_helper.rb
|
786
792
|
- templates/Eulerfile.rb
|
787
793
|
- templates/coffeescript.coffee
|
794
|
+
- templates/haskell.hs
|
788
795
|
- templates/java.java
|
789
796
|
- templates/javascript.js
|
797
|
+
- templates/julia.jl
|
790
798
|
- templates/python.py
|
791
799
|
- templates/ruby.rb
|
792
800
|
- templates/scala.scala
|
@@ -810,7 +818,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
810
818
|
version: '0'
|
811
819
|
requirements: []
|
812
820
|
rubyforge_project:
|
813
|
-
rubygems_version: 2.0.
|
821
|
+
rubygems_version: 2.0.14
|
814
822
|
signing_key:
|
815
823
|
specification_version: 4
|
816
824
|
summary: Manage and test project Euler problems from your command line.
|