Sha256: 1cee7c9726ac2809e494c32782014e912b141bac49d5cc35b440f14974c8b56a

Contents?: true

Size: 1.49 KB

Versions: 54

Compression:

Stored size: 1.49 KB

Contents

class AlphameticsCase < OpenStruct
  def test_name
    "test_#{description.tr(' ', '_')}"
  end

  def skipped
    index.zero? ? '# skip' : 'skip'
  end

  def input
    "'#{puzzle}'"
  end

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

  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 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

AlphameticsCases = proc do |data|
  JSON.parse(data)['solve']['cases'].map.with_index do |row, i|
    row = row.merge('index' => i)
    AlphameticsCase.new(row)
  end
end

Version data entries

54 entries across 54 versions & 1 rubygems

Version Path
trackler-2.0.6.11 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.10 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.9 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.8 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.7 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.6 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.5 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.4 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.3 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.2 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.1 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.6.0 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.5.18 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.5.17 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.5.16 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.5.15 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.5.14 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.5.13 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.5.12 tracks/ruby/lib/alphametics_cases.rb
trackler-2.0.5.11 tracks/ruby/lib/alphametics_cases.rb