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