示例#1
0
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)]
示例#2
0
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)]
示例#3
0
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()
示例#4
0
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)]
示例#5
0
 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))
示例#6
0
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()
示例#7
0
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)]
示例#8
0
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()