Euler Manager
Manage Project Euler problems form the command line.
Installing
$ gem install euler-manager
Usage
Euler manager has 7 commands:
init
initializes an empty Eulerfile.rb
in the directory you are currently
in.
$ euler init
new
initializes a solution. This typically means creating the directory for
the solution and populating it with some files.
$ euler new [problem_id] [language]
desc
shows a problem's prompt.
$ euler desc [problem_id]
run
executes a solution.
$ euler run [problem_id] [language]
test
runs a solution to see if it is correct.
$ euler test [problem_id] [language]
test_all
runs all of your solutions to see if they are correct.
$ euler test_all
include_images
will copy Project Euler's images into your euler managed
directory so that you can access them without an Internet connection.
$ euler include_images
If you do not pass a problem id and language to the desc
, run
, or test
commands Euler manager will use the directory it was invoked from to try to
guess which problem id and language to use. So if you want to run the ruby
solution for problem number 1 then you can just run $ euelr run
from 1/ruby
(by default) and Euler manager will run the ruby solution for problem 1.
Supported Programming Languages
- C
- coffeescript
- elixir
- haskell
- java
- javascript
- julia
- perl
- php
- python
- ruby
- scala
Configuring Euler Manager
To configure the Euler manager place an Eulerfile.rb
in the root of your
project. Typically you can just keep this file empty but if you want to change
any of the Euler manager's defaults or register an additional language you would
do that here.
See /example/Eulerfile.rb
for an example Eulerfile.rb
.
Registering Additional Languages
If Euler manager does not support your programming language of choice by default
or you would like to change how a supported language functions then you use the
Euler.register_language
method. This method accepts the name of the language
you are registering and a class definition for that language.
Feel free to send a pull request with additional languages.
Example
Euler.register_language('ruby', Class.new do
# Run the solution
def run solution
`ruby #{file_path(solution)}`
end
# Copy the template into the solution's directory
def init solution
FileUtils.cp(template_path, file_path(solution))
end
private
# Returns the path to the solution
def file_path solution
"#{solution.dir}/#{solution.problem.id}.rb"
end
# Returns the path to the ruby template
def template_path
"#{File.dirname(__FILE__)}/templates/ruby.rb"
end
end)
The init
method of the language's class is optional but he run
method is
required.
For more examples of registering languages see the /lib/euler/languages
directory or the Eulerfile.rb
in the /example
directory.
Contributing
Pull requests are welcome!
Please send pull requests to the develop
branch.
To Do
- add more languages
- better error messages
- documentation could be better?
- tests could probably be better too