最近、私は「スクランブルスクエア」タイルパズルの解決策を決定するためのRubyプログラムを作成しました。
私は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にあります。