def test_get_left_most_ranges__full_row(data): assert RowAnalyzer(data[TRUE_RIGHT_ROW], data[SINGLE_ONE_INS]).get_left_most_ranges() == \ [range(4, 5)] assert RowAnalyzer(data[TRUE_RIGHT_ROW], data[TWO_ONE_INS]).get_left_most_ranges() == \ [range(0, 1), range(4, 5)] assert RowAnalyzer(data[TRUE_RIGHT_ROW], data[ONE_TWO_INS]).get_left_most_ranges() == \ [range(0, 1), range(3, 5)]
def test_get_left_most_ranges__middle_false_row(data): assert RowAnalyzer(data[FALSE_MIDDLE_ROW], data[SINGLE_ONE_INS]).get_left_most_ranges() == \ [range(0, 1)] assert RowAnalyzer(data[FALSE_MIDDLE_ROW], data[TWO_ONE_INS]).get_left_most_ranges() == \ [range(0, 1), range(3, 4)] assert RowAnalyzer(data[FALSE_MIDDLE_ROW], data[ONE_TWO_INS]).get_left_most_ranges() == \ [range(0, 1), range(3, 5)]
def test_get_is_solvalble__alternating(data): assert RowAnalyzer(data[TRUE_FALSE_ALT_ROW], data[THREE_ONE_INS]).get_is_solvable() assert not RowAnalyzer(data[TRUE_FALSE_ALT_ROW], data[TWO_ONE_INS]).get_left_most_ranges() assert not RowAnalyzer(data[TRUE_FALSE_ALT_ROW], data[SINGLE_ONE_INS]).get_left_most_ranges()
def test_get_left_most_ranges__unset_row(data): assert RowAnalyzer(data[EMPTY_ROW], data[SINGLE_ONE_INS]).get_left_most_ranges() == \ [range(0, 1)] assert RowAnalyzer(data[EMPTY_ROW], data[TWO_ONE_INS]).get_left_most_ranges() == \ [range(0, 1), range(2, 3)] assert RowAnalyzer(data[EMPTY_ROW], data[THREE_ONE_INS]).get_left_most_ranges() == \ [range(0, 1), range(2, 3), range(4, 5)] assert RowAnalyzer(data[EMPTY_ROW], data[ONE_TWO_INS]).get_left_most_ranges() == \ [range(0, 1), range(2, 4)]
def analyze_and_solve_(self, guess: Guess): row_analyzer = RowAnalyzer( self.board.get_row(guess.location.row), self.board.get_row_instructions(guess.location.row)) column_analyzer = RowAnalyzer( self.board.get_column(guess.location.column), self.board.get_column_instructions(guess.location.column)) return row_analyzer.get_is_solvable( ) and column_analyzer.get_is_solvable() and self.solve_( self.next_guess_location(guess))
def test_get_is_solvable__simple_rows(data): # Empty row: assert RowAnalyzer(data[EMPTY_ROW], data[SINGLE_ONE_INS]).get_is_solvable() assert RowAnalyzer(data[EMPTY_ROW], data[TWO_ONE_INS]).get_is_solvable() assert not RowAnalyzer(data[EMPTY_ROW], data[FOUR_ONE_INS]).get_is_solvable() assert RowAnalyzer(data[EMPTY_ROW], data[THREE_ONE_INS]).get_is_solvable() # No fill in middle row: assert RowAnalyzer(data[FALSE_MIDDLE_ROW], data[SINGLE_ONE_INS]).get_is_solvable() assert RowAnalyzer(data[FALSE_MIDDLE_ROW], data[TWO_ONE_INS]).get_is_solvable() assert not RowAnalyzer(data[FALSE_MIDDLE_ROW], data[THREE_ONE_INS]).get_is_solvable() # No fill in mid right: assert RowAnalyzer(data[FALSE_MID_RIGHT_ROW], data[THREE_ONE_INS]).get_is_solvable() # No fill in [1,2]: assert RowAnalyzer(data[FALSE_MID_LEFT_ROW], data[TWO_ONE_INS]).get_is_solvable() assert not RowAnalyzer(data[FALSE_MID_LEFT_ROW], data[THREE_ONE_INS]).get_is_solvable() # Instructions are [1, 2]: assert RowAnalyzer(data[EMPTY_ROW], data[ONE_TWO_INS]).get_is_solvable() assert RowAnalyzer(data[FALSE_MIDDLE_ROW], data[ONE_TWO_INS]).get_is_solvable() assert RowAnalyzer(data[FALSE_MID_LEFT_ROW], data[ONE_TWO_INS]).get_is_solvable() assert not RowAnalyzer(data[FALSE_MID_RIGHT_ROW], data[ONE_TWO_INS]).get_is_solvable() # Rows with [UNSET, UNSET, UNSET, FALSE/UNSER, TRUE]: assert RowAnalyzer(data[TRUE_RIGHT_ROW], data[THREE_ONE_INS]).get_is_solvable() assert RowAnalyzer(data[TRUE_RIGHT_ROW], data[ONE_TWO_INS]).get_is_solvable() assert RowAnalyzer(data[TURE_RIGHT_FALSE_RIGHT_ROW], data[THREE_ONE_INS]).get_is_solvable() assert not RowAnalyzer(data[TURE_RIGHT_FALSE_RIGHT_ROW], data[ONE_TWO_INS]).get_is_solvable()
def test_get_left_most_ranges__no_fill_in_range__skip_to_next_range(data): assert RowAnalyzer( data[TURE_MID_FALSE_MID_LEFT_ROW], data[THREE_INS]).get_left_most_ranges() == [range(2, 5)]
def test_get_is_solvable__full_row(data): assert RowAnalyzer(data[EMPTY_ROW], data[FULL_INS]).get_is_solvable() assert not RowAnalyzer(data[FALSE_MIDDLE_ROW], data[FULL_INS]).get_is_solvable() assert not RowAnalyzer(data[FALSE_MID_RIGHT_ROW], data[FULL_INS]).get_is_solvable() assert not RowAnalyzer(data[FALSE_MID_LEFT_ROW], data[FULL_INS]).get_is_solvable() assert RowAnalyzer(data[TRUE_RIGHT_ROW], data[FULL_INS]).get_is_solvable() assert not RowAnalyzer(data[TURE_RIGHT_FALSE_RIGHT_ROW], data[FULL_INS]).get_is_solvable() assert RowAnalyzer(data[FULL_ROW], data[FULL_INS]).get_is_solvable() assert not RowAnalyzer(data[FULL_ROW], data[SINGLE_ONE_INS]).get_is_solvable() assert not RowAnalyzer(data[FULL_ROW], data[TWO_ONE_INS]).get_is_solvable() assert not RowAnalyzer(data[FULL_ROW], data[THREE_ONE_INS]).get_is_solvable() assert not RowAnalyzer(data[FULL_ROW], data[FOUR_ONE_INS]).get_is_solvable() assert not RowAnalyzer(data[FULL_ROW], data[ONE_TWO_INS]).get_is_solvable()