new_combo[len(piece) - 1] += 1 res.add(tuple(new_combo)) seen[sorted_coords] = res return res if __name__ == '__main__': from test import Test as test test.expect( validate_battlefield([[1, 0, 0, 0, 0, 1, 1, 0, 0, 0], [1, 0, 1, 0, 0, 0, 0, 0, 1, 0], [1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), "Must return true for valid field") # concat test case test.expect( validate_battlefield([[1, 0, 0, 0, 0, 1, 1, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 1, 0], [1, 1, 0, 0, 1, 1, 1, 0, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
'11111100000', '1B111100000', '11110111100', '11100111110', '10000001111', '11110000111', '11110000111', '00110111111', '01111111111', '0110011X100', '01100011100' ], [ '000001111110000', '000001001110000', '000001001111100', 'B11111000001111', '0000111000011X1', '000011100000111', '000000100110000', '000000111110000', '000000111110000', '000000011100000' ]] example_sols = [['RRDRRRD', 'RDDRRDR', 'RDRRDDR'], ['ULDRURRRRUURRRDDDRU', 'RURRRULDRUURRRDDDRU'], ['ULURRURRRRRRDRDDDDDRULLLLLLD'], ['DRURURDDRRDDDLD'], [ 'RRRDRDDRDDRULLLUULUUURRRDDLURRDRDDR', 'RRRDDRDDRDRULLLUULUUURRDRRULDDRRDDR', 'RRRDRDDRDDRULLLUULUUURRDRRULDDRRDDR', 'RRRDDRDDRDRULLLUULUUURRRDDLURRDRDDR' ]] for i, x in enumerate(example_tests): actual = blox_solver(x) test.expect(actual in example_sols[i]) # pos = ((0, 0),) # for move in "DRULDRULDRRDDRR": # new_pos = move_pos(pos, move) # print(f"{move}: {pos} -> {new_pos}") # pos = new_pos