예제 #1
0
def no_zero_cell_clauses(cell_width):
    def no_zero_cells(i, j, row_length):
        """
        Encodes: "Cell i, j is non-zero."
    
        """ 
        literals = [lit(d, i, j) for d in irange(1, row_length)]
        return ' || '.join(literals)         
    row_length = cell_width * cell_width
    clauses = []
    for row in irange(1, row_length):
        for col in irange(1, row_length): 
            clauses.append(no_zero_cells(row, col, row_length))
    return clauses
예제 #2
0
 def no_zero_cells(i, j, row_length):
     """
     Encodes: "Cell i, j is non-zero."
 
     """ 
     literals = [lit(d, i, j) for d in irange(1, row_length)]
     return ' || '.join(literals)         
예제 #3
0
def exactly_one_clauses(groups, cell_width):
    clauses = []
    num_symbols = cell_width * cell_width
    for group in groups:
        for digit in irange(1, num_symbols):
            clauses.append(at_least_clause(group, digit))
            clauses += at_most_clauses(group, digit)
    return clauses
예제 #4
0
 def zones(self):
     def zone_cells(a, b, cell_width):
         return [(i+1,j+1) for i in range((a-1) * cell_width, a * cell_width)
                           for j in range((b-1) * cell_width, b * cell_width)]
     return [zone_cells(a, b, self.cell_width) for a in irange(1, self.cell_width)
                                               for b in irange(1, self.cell_width)]
예제 #5
0
 def col_cells(j, col_length):
     return [(i, j) for i in irange(1, col_length)]
예제 #6
0
 def columns(self):
     def col_cells(j, col_length):
         return [(i, j) for i in irange(1, col_length)]
     num_symbols = self.cell_width * self.cell_width
     return [col_cells(col, num_symbols) for col in irange(1, num_symbols)]
예제 #7
0
 def row_cells(i, row_length):
     return [(i, j) for j in irange(1, row_length)]
예제 #8
0
 def rows(self):
     def row_cells(i, row_length):
         return [(i, j) for j in irange(1, row_length)]
     num_symbols = self.cell_width * self.cell_width
     return [row_cells(row, num_symbols) for row in irange(1, num_symbols)]