Euler Manager

Code Climate Code Climate Build Status

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