Как я могу использовать TDD для решения головоломки с неизвестным ответом?

Недавно я написал программу на Ruby для поиска решений мозаичной головоломки "Scramble Squares" :

Я использовал TDD для реализации большей части, что привело к тестам, которые выглядели следующим образом:

it "has top, bottom, left, right" do
  c = Cards.new
  card = c.cards[0]
  card.top.should == :CT
  card.bottom.should == :WB
  card.left.should == :MT
  card.right.should == :BT
end

Это хорошо работало для низкоуровневых «вспомогательных» методов: определение «сторон» тайла, определение того, можно ли правильно разместить тайл в сетке и т. Д.

Но я столкнулся с проблемой при кодировании реального алгоритма решить загадку. Поскольку я не знал возможных возможных решений проблемы, я не знал, как сначала написать тест.

В итоге я написал довольно уродливый, непроверенный алгоритм для его решения:

  def play_game
    working_states = []
    after_1 = step_1
    i = 0
    after_1.each do |state_1|
      step_2(state_1).each do |state_2|
        step_3(state_2).each do |state_3|
          step_4(state_3).each do |state_4|
            step_5(state_4).each do |state_5|
              step_6(state_5).each do |state_6|
                step_7(state_6).each do |state_7|
                  step_8(state_7).each do |state_8|
                    step_9(state_8).each do |state_9|
                      working_states << state_9[0]
                    end
                  end
                end
              end
            end
          end
        end
      end
    end 

Итак у меня вопрос: как вы используете TDD для написания метода, когда вы еще не знаете действительные результаты?

Если вам интересно, код на GitHub:

9
задан Community 8 February 2017 в 14:31
поделиться