Sha256: b73bdd0accf1d1a887a08ecff7e5a478c91828855eaa1080f50a9ed9c4764243

Contents?: true

Size: 1.25 KB

Versions: 233

Compression:

Stored size: 1.25 KB

Contents

require 'generator/exercise_case'

class AlphameticsCase < Generator::ExerciseCase
  def workload
    body =
      "input = %s\n" % input,
      "expected = %s\n" % expect,
      "assert_equal expected, Alphametics.solve(input)"
    indent(body, 4)
  end

  def runtime_comment
    if slow?
      comments =
        '',
        "# The obvious algorithm can take a long time to solve this puzzle,\n",
        "# but an optimised solution can solve it fairly quickly.\n",
        "# (It's OK to submit your solution without getting this test to pass.)\n"
      indent(comments, 2)
    end
  end

  private

  def input
    "'#{puzzle}'"
  end

  def expect
    expected.nil? ? {} : expected_values
  end

  def slow?
    (expected||{}).size > 7
  end

  def expected_values
    "{ #{indent(expected_values_as_lines, 17)} }"
  end

  def expected_values_as_lines
    lines = expected_values_as_strings.each_slice(4).map { |line| line.join(', ') }
    add_trailing_comma_and_newline(lines)
  end

  def expected_values_as_strings
    expected.sort.map { |(key, value)| "'#{key}' => #{value}" }
  end

  def add_trailing_comma_and_newline(lines)
    lines[0...-1].map { |line| "#{line},\n" }.push(lines.last)
  end

  def indent(lines, spaces)
    lines.join(' ' * spaces)
  end

end

Version data entries

233 entries across 233 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.179 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.178 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.177 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.176 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.175 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.174 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.173 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.172 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.171 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.170 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.169 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.167 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.166 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.165 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.164 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.163 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.162 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.161 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb
trackler-2.2.1.160 tracks/ruby/exercises/alphametics/.meta/generator/alphametics_case.rb