rthbound/rubeuler

View on GitHub
lib/rubeuler/problem.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'benchmark'

module Rubeuler
  include Solution

  class Problem
    include PayDirt::UseCase

    def initialize(options)
      load_options(:number, :answer, options)

      raise TypeError, ':answer should be a string' unless @answer.is_a?(String)
      raise TypeError, ':number should be an integer' unless @number.is_a?(Fixnum)
    end

    def execute!
      time = timed_answer
      true_or_false = @data == solution ? true : false

      return PayDirt::Result.new(success: true, problem: @number, data: data)
    end

    private
    def timed_answer
      @benchmark = Benchmark.measure { @data = instance_eval(@answer.gsub("\n",";"))}.real
    end

    def solution
      Rubeuler::Solution.for_problem(@number)
    end

    def data
      result_data = {
        solution: @data,
        benchmark: @benchmark
      }

      @tracked.each { |k,v| result_data.merge!({ k => instance_eval(v.to_s) }) } if @tracked

      result_data
    end
  end
end