def test_solve(self): testlogigraph = logigraph([[2],[1,1],[1],[1],[1],[2]],[[1,1],[1],[1],[2],[2]]) testsolver = edge_logic_solver() testsolver.solve(testlogigraph) self.assertEqual('____.', ''.join(testlogigraph.line_list[0].cells_list)) self.assertEqual('_____', ''.join(testlogigraph.line_list[1].cells_list)) self.assertEqual('_____', ''.join(testlogigraph.line_list[2].cells_list)) self.assertEqual('_____', ''.join(testlogigraph.line_list[3].cells_list)) self.assertEqual('_____', ''.join(testlogigraph.line_list[4].cells_list)) self.assertEqual('____.', ''.join(testlogigraph.line_list[5].cells_list))
def absurd_solve_try(self): test_logigraph = logigraph([[2], [1, 1], [1], [1], [2]], [[1, 1], [1], [1], [2], [2]]) linear = linear_solver() edge = edge_solver() absurd = absurd_solver() linear.solve(test_logigraph) assertEqual(test_logigraph.is_solved(), False) assertEqual(test_logigraph.is_lineary_solvable(), False) string_repr = '\n 1, , , , ,\n 1,1,1,2,2,\n 2|_|_|_|_|_|\n 1,1|_|_|_|_|_|\n 1|_|_|_|_|_|\n 1|_|_|_|_|_|\n 2|_|_|_|_|_|' assertEqual(string_repr, repr(test_logigraph)) edge.solve(test_logigraph) assertEqual(test_logigraph.is_solved(), False) assertEqual(test_logigraph.is_lineary_solvable(), False) assertEqual(test_logigraph.is_possible, True) string_repr = '\n 1, , , , ,\n 1,1,1,2,2,\n 2|_|_|_|_|.|\n 1,1|_|_|_|_|_|\n 1|_|_|_|_|_|\n 1|_|_|_|_|_|\n 2|_|_|_|_|.|' assertEqual(string_repr, repr(test_logigraph)) linear.solve(test_logigraph) assertEqual(test_logigraph.is_solved(), False) assertEqual(test_logigraph.is_possible, True) assertEqual(test_logigraph.is_lineary_solvable(), False) string_repr = '\n 1, , , , ,\n 1,1,1,2,2,\n 2|_|_|_|_|.|\n 1,1|_|_|_|_|_|\n 1|.|.|.|.|x|\n 1|_|_|_|_|_|\n 2|_|_|_|_|.|' assertEqual(string_repr, repr(test_logigraph)) absurd.solve(test_logigraph) assertEqual(test_logigraph.is_solved(), True) assertEqual(test_logigraph.is_possible, True) string_repr = '\n 1, , , , ,\n 1,1,1,2,2,\n 2|.|.|x|x|.|\n 1,1|x|.|.|x|.|\n 1|.|.|.|.|x|\n 1|.|.|.|.|x|\n 2|x|x|.|.|.|' assertEqual(string_repr, repr(test_logigraph)) test_logigraph = logigraph([[2], [1, 1], [1], [1], [2]], [[1, 1], [1], [1], [2], [2]]) absurd.solve(test_logigraph) assertEqual(test_logigraph.is_solved(), True) assertEqual(test_logigraph.is_possible, True) string_repr = '\n 1, , , , ,\n 1,1,1,2,2,\n 2|.|.|x|x|.|\n 1,1|x|.|.|x|.|\n 1|.|.|.|.|x|\n 1|.|.|.|.|x|\n 2|x|x|.|.|.|' assertEqual(string_repr, repr(test_logigraph))
def impossible_solve_try(self): test_logigraph = logigraph([[2], [1, 1], [1], [1], [1], [2]], [[1, 1], [1], [1], [2], [2]]) linear = linear_solver() absurd = absurd_solver() linear.solve(test_logigraph) assertEqual(test_logigraph.is_solved(), False) assertEqual(test_logigraph.is_lineary_solvable(), False) absurd.solve(test_logigraph) assertEqual(test_logigraph.is_solved(), False) assertEqual(test_logigraph.is_lineary_solvable, False) assertEqual(test_logigraph.is_possible, False)
def test_solve(self): testlogigraph = logigraph([[2, 1], [3], [1, 1], [1, 1], [1]], [[1, 1], [4], [1], [2], [2]]) testsolver = linear_solver() testsolver.solve(testlogigraph) self.assertEqual('xx.x.', ''.join(testlogigraph.line_list[0].cells_list)) self.assertEqual('.xxx.', ''.join(testlogigraph.line_list[1].cells_list)) self.assertEqual('.x..x', ''.join(testlogigraph.line_list[2].cells_list)) self.assertEqual('.x..x', ''.join(testlogigraph.line_list[3].cells_list)) self.assertEqual('x....', ''.join(testlogigraph.line_list[4].cells_list))
def random_solve_try(self): test_logigraph = logigraph() col_size = random.randint(4, 12) line_size = random.randint(4, 12) for line_nbr in range(col_size): rand_line_pattern = [] for cell_nbr in range(line_size): cell = random.choice(['.', 'x']) rand_line_pattern.append(cell) test_line = line(line_size) test_line.cells_list = rand_line_pattern test_line.index_list = test_line.get_index_from_pattern() test_logigraph.line_list.append(test_line) test_logigraph.transpose() for col_nbr in range(line_size): test_logigraph.line_list[col_nbr].index_list = line_list[ col_nbr].get_index_from_pattern() test_logigraph.transpose() for line_nbr in range(col_size): test_logigraph.line_list[line_nbr].cells_list = line_size * ['_'] linear = linear_solver() linear.solve(test_logigraph) if test_logigraph.is_full(): self.assertEqual(True, test_logigraph.is_solved()) self.assertEqual(True, test_logigraph.is_lineary_solvable) self.assertEqual(True, test_logigraph.is_possible) for line_nbr in range(col_size): test_logigraph.line_list[line_nbr].cells_list = line_size * ['_'] absurd = absurd_solver() absurd.solve(test_logigraph) self.assertEqual(True, test_logigraph.is_full()) self.assertEqual(True, test_logigraph.is_solved()) self.assertEqual(True, test_logigraph.is_lineary_solvable) self.assertEqual(True, test_logigraph.is_possible)
from logigraph.logigraph import logigraph from logigraph.solver import linear_solver, edge_logic_solver, absurd_solver log = logigraph() log.set_from_file('logigraph_inputs/nolinear.txt') l = linear_solver() e = edge_logic_solver() a = absurd_solver() l.solve(log) print(log) log.set_from_file('logigraph_inputs/nolinear.txt') a.solve(log) print(log) print(log.is_possible)