def test_safely_put_one_more_queen_on_a_board_with_knight_pattern_starting_from_a1(self): board = get_board(["a1", "b3", "c5", "d7"]) column_e = ["e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8"] board, queen_position = safely_put_one_more_queen(board, column_e) self.assertEquals(5, count_queen(board)) self.assertTrue(validate_board(board)) self.assertTrue(is_queen(board, "e2"))
def test_safely_put_one_more_queen_on_a_board_with_knight_pattern_starting_from_h8(self): board = get_board(["h8", "g6", "f4", "e2"]) column_d = ["d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8"] board, queen_position = safely_put_one_more_queen(board, column_d) self.assertEquals(5, count_queen(board)) self.assertTrue(validate_board(board)) self.assertTrue(is_queen(board, "d7"))
def test_board_with_2_queens_at_a1_and_h8_should_not_valid(self): board = u""" a b c d e f g h 8 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ♛ 7 ◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻ 6 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 5 ◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻ 4 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 3 ◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻ 2 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 1 ♛ ◻ ◼ ◻ ◼ ◻ ◼ ◻ """ valid = validate_board(board) self.assertFalse(valid)
def test_board_with_2_queens_in_column_a_should_not_valid(self): board = u""" a b c d e f g h 8 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 7 ♛ ◻ ◼ ◻ ◼ ◻ ◼ ◻ 6 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 5 ◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻ 4 ♛ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 3 ◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻ 2 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 1 ◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻ """ valid = validate_board(board) self.assertFalse(valid)
def test_board_with_2_queens_in_row_1_should_not_valid(self): board = u""" a b c d e f g h 8 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 7 ◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻ 6 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 5 ◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻ 4 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 3 ◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻ 2 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 1 ♛ ◻ ◼ ◻ ◼ ◻ ♛ ◻ """ valid = validate_board(board) self.assertFalse(valid)
def test_board_with_queens_at_a2_b4_c1_d3_e5_should_valid(self): board = u""" a b c d e f g h 8 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 7 ◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻ 6 ◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 5 ◼ ◻ ◼ ◻ ♛ ◻ ◼ ◻ 4 ◻ ♛ ◻ ◼ ◻ ◼ ◻ ◼ 3 ◼ ◻ ◼ ♛ ◼ ◻ ◼ ◻ 2 ♛ ◼ ◻ ◼ ◻ ◼ ◻ ◼ 1 ◼ ◻ ♛ ◻ ◼ ◻ ◼ ◻ """ valid = validate_board(board) self.assertTrue(valid)
def safely_put_one_more_queen(board, positions=None): positions = positions or all_positions safe_positions_left = -1 best_position = None for position in positions: result_board = put_queen(board, position) board_is_still_valid = validate_board(result_board) more_queen_was_added = count_queen(result_board) > count_queen(board) if board_is_still_valid and more_queen_was_added: queen_positions = find_queen_positions(result_board) safe_positions = find_safe_positions(queen_positions, positions) if len(safe_positions) > safe_positions_left: safe_positions_left = len(safe_positions) best_position = position best_result = result_board if best_position == None: raise CannotPutMoreQueenException('Not expected here') print '%s' % best_position return best_result, best_position
def test_safely_put_one_more_queen_on_empty_board(self): board = get_board([]) board, queen_position = safely_put_one_more_queen(board) self.assertEquals(1, count_queen(board)) self.assertTrue(validate_board(board))
def test_solve_puzzle_starting_at_middle_of_the_board(self): starting_point = "d5" board = solve_puzzle(starting_point) self.assertTrue(is_queen(board, "d5")) self.assertTrue(validate_board(board)) self.assertEquals(8, count_queen(board))
def test_solve_puzzle_starting_at_top_left_corner(self): starting_point = "a8" board = solve_puzzle(starting_point) self.assertTrue(is_queen(board, "a8")) self.assertTrue(validate_board(board)) self.assertEquals(8, count_queen(board))
def test_solve_puzzle_starting_at_bottom_right_corner(self): starting_point = "h1" board = solve_puzzle(starting_point) self.assertTrue(is_queen(board, "h1")) self.assertTrue(validate_board(board)) self.assertEquals(8, count_queen(board))
def test_safely_put_one_more_queen_on_a_board_with_queen_at_a1_and_b3(self): board_with_queen_at_a1_and_b3 = put_queen(board_with_queen_at_a1, "b3") board, queen_position = safely_put_one_more_queen(board_with_queen_at_a1_and_b3) self.assertEquals(3, count_queen(board)) self.assertTrue(validate_board(board))
def test_safely_put_one_more_queen_on_a_board_with_queen_at_a1(self): board, queen_position = safely_put_one_more_queen(board_with_queen_at_a1) self.assertEquals(2, count_queen(board)) self.assertTrue(validate_board(board))
def test_empty_board_should_valid(self): valid = validate_board(empty_board) self.assertTrue(valid)