def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5;1,6;1,7;1,8'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5;3,6;3,7;3,8'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5;4,6;4,7;4,8'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;6,3;6,4;6,5;6,6;6,7;6,8'), RuleItemMutex(self.question_data, '7,0;7,1;7,2;7,3;7,4;7,5;7,6;7,7;7,8'), RuleItemMutex(self.question_data, '8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5'), RuleItemMutex(self.question_data, '0,6;1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6'), RuleItemMutex(self.question_data, '0,7;1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7'), RuleItemMutex(self.question_data, '0,8;1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8'), RuleItemMutex(self.question_data, '0,0;0,1;0,2;1,0;1,1;1,2;2,0;2,1;2,2'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;4,0;4,1;4,2;5,0;5,1;5,2'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;7,0;7,1;7,2;8,0;8,1;8,2'), RuleItemMutex(self.question_data, '0,3;0,4;0,5;1,3;1,4;1,5;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,3;3,4;3,5;4,3;4,4;4,5;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '6,3;6,4;6,5;7,3;7,4;7,5;8,3;8,4;8,5'), RuleItemMutex(self.question_data, '0,6;0,7;0,8;1,6;1,7;1,8;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,6;3,7;3,8;4,6;4,7;4,8;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,6;6,7;6,8;7,6;7,7;7,8;8,6;8,7;8,8'), ] # 读取Excel中所有DPL函数,计算DPL的每一组数据分别经过了哪些单元格,然后添加互斥规则 for draw_function_data in self.question_data.draw_function_list: if draw_function_data.function_name == 'DPL': for data_group in draw_function_data.data.split(';'): data_group_split = data_group.split(':') if len(data_group_split) == 2: # 算法只处理DPL是两点之间的线 point_0 = data_group_split[0].split(',') point_1 = data_group_split[1].split(',') x_start = int(point_0[0]) y_start = int(point_0[1]) x_min = min(int(point_0[0]), int(point_1[0])) x_max = max(int(point_0[0]), int(point_1[0])) y_min = min(int(point_0[1]), int(point_1[1])) y_max = max(int(point_0[1]), int(point_1[1])) x_sub = 1 if int(point_1[0]) > int(point_0[0]) else -1 if x_sub == -1: x_start = x_start - 1 y_sub = 1 if int(point_1[1]) > int(point_0[1]) else -1 if y_sub == -1: y_start = y_start - 1 x_range = x_max - x_min y_range = y_max - y_min rule_str = '' if x_range == y_range: # 算法现在只处理经过单元格对角线的DPL for i in range(x_range): rule_str = rule_str + str(i * x_sub + x_start) + ',' + str(i * y_sub + y_start) + ';' self.question_data.rules_list.append(RuleItemMutex(self.question_data, rule_str))
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5;1,6;1,7;1,8'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5;3,6;3,7;3,8'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5;4,6;4,7;4,8'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;6,3;6,4;6,5;6,6;6,7;6,8'), RuleItemMutex(self.question_data, '7,0;7,1;7,2;7,3;7,4;7,5;7,6;7,7;7,8'), RuleItemMutex(self.question_data, '8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5'), RuleItemMutex(self.question_data, '0,6;1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6'), RuleItemMutex(self.question_data, '0,7;1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7'), RuleItemMutex(self.question_data, '0,8;1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8'), RuleItemMutex(self.question_data, '0,0;0,1;0,2;1,0;1,1;1,2;2,0;2,1;2,2'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;4,0;4,1;4,2;5,0;5,1;5,2'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;7,0;7,1;7,2;8,0;8,1;8,2'), RuleItemMutex(self.question_data, '0,3;0,4;0,5;1,3;1,4;1,5;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,3;3,4;3,5;4,3;4,4;4,5;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '6,3;6,4;6,5;7,3;7,4;7,5;8,3;8,4;8,5'), RuleItemMutex(self.question_data, '0,6;0,7;0,8;1,6;1,7;1,8;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,6;3,7;3,8;4,6;4,7;4,8;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,6;6,7;6,8;7,6;7,7;7,8;8,6;8,7;8,8'), ] all_relations = [] # 先计算出所有相邻单元格关系,然后稍后再下方进行关系筛选,其余的最后做不等关系规则 for y in range(self.question_data.dimensionY): for x in range(self.question_data.dimensionX): if x < self.question_data.dimensionX - 1: all_relations.append( str(x) + ',' + str(y) + ';' + str(x + 1) + ',' + str(y)) if y < self.question_data.dimensionY - 1: all_relations.append( str(x) + ',' + str(y) + ';' + str(x) + ',' + str(y + 1)) # 读取Excel中所有DLE函数,生成连续数独相关的等于关系规则,并对上方的相邻单元格关系规则进行过滤剔除 for draw_function_data in self.question_data.draw_function_list: if draw_function_data.function_name == 'DLE': relation_direction = draw_function_data.parameters[0] for param_group in draw_function_data.data.split(';'): param_group_split = param_group.split(':') if len(param_group_split) > 1: for location_tag in param_group_split[0].split(','): # 将单元格tag转换成坐标,如A3 -> 2,0 location = [ int(location_tag[1]) - 1, ord(location_tag[0]) - 65 ] relation_str = '' if relation_direction == 'R': cell1 = str(location[0]) + ',' + str( location[1]) cell2 = str(location[0] + 1) + ',' + str( location[1]) relation_str = cell1 + ';' + cell2 rule_str = 'abs(cell_value(' + cell1 + ') - cell_value(' + cell2 + ')) == 1' self.question_data.rules_list.append( RuleFormulaCheck(self.question_data, rule_str)) elif relation_direction == 'B': cell1 = str(location[0]) + ',' + str( location[1]) cell2 = str( location[0]) + ',' + str(location[1] + 1) relation_str = cell1 + ';' + cell2 rule_str = 'abs(cell_value(' + cell1 + ') - cell_value(' + cell2 + ')) == 1' self.question_data.rules_list.append( RuleFormulaCheck(self.question_data, rule_str)) if not relation_str == '': # 剔除已有关系的元素 if relation_str in all_relations: all_relations.remove(relation_str) # 为剩余没有粗线关系的单元格组合增加连续相差为1规则 for relation_str in all_relations: cells = relation_str.split(';') self.question_data.rules_list.append( RuleFormulaCheck( self.question_data, 'abs(cell_value(' + cells[0] + ') - cell_value(' + cells[1] + ')) != 1'))
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5;1,6;1,7;1,8'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5;3,6;3,7;3,8'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5;4,6;4,7;4,8'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;6,3;6,4;6,5;6,6;6,7;6,8'), RuleItemMutex(self.question_data, '7,0;7,1;7,2;7,3;7,4;7,5;7,6;7,7;7,8'), RuleItemMutex(self.question_data, '8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5'), RuleItemMutex(self.question_data, '0,6;1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6'), RuleItemMutex(self.question_data, '0,7;1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7'), RuleItemMutex(self.question_data, '0,8;1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8'), RuleItemMutex(self.question_data, '0,0;0,1;0,2;1,0;1,1;1,2;2,0;2,1;2,2'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;4,0;4,1;4,2;5,0;5,1;5,2'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;7,0;7,1;7,2;8,0;8,1;8,2'), RuleItemMutex(self.question_data, '0,3;0,4;0,5;1,3;1,4;1,5;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,3;3,4;3,5;4,3;4,4;4,5;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '6,3;6,4;6,5;7,3;7,4;7,5;8,3;8,4;8,5'), RuleItemMutex(self.question_data, '0,6;0,7;0,8;1,6;1,7;1,8;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,6;3,7;3,8;4,6;4,7;4,8;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,6;6,7;6,8;7,6;7,7;7,8;8,6;8,7;8,8'), ] # 读取Excel中所有DBG函数,生成奇数灰格子的互斥规则 for draw_function_data in self.question_data.draw_function_list: if draw_function_data.function_name == 'DOE': index = 0 for location_tag in draw_function_data.data.split(','): if location_tag is not '0': cell_list = [] if draw_function_data.parameters[0] is 'T': for i in range(self.question_data.dimensionY): cell_list.append('cell_value(' + str(index) + ',' + str(i) + ')') if draw_function_data.parameters[0] is 'B': for i in range(self.question_data.dimensionY - 1, -1, -1): cell_list.append('cell_value(' + str(index) + ',' + str(i) + ')') if draw_function_data.parameters[0] is 'L': for i in range(self.question_data.dimensionX): cell_list.append('cell_value(' + str(i) + ',' + str(index) + ')') if draw_function_data.parameters[0] is 'R': for i in range(self.question_data.dimensionX - 1, -1, -1): cell_list.append('cell_value(' + str(i) + ',' + str(index) + ')') rule_str = 'calculate_max_count([' + ','.join( cell_list) + ']) == ' + location_tag self.question_data.rules_list.append( RuleFormulaCheck(self.question_data, rule_str)) index = index + 1 print('11')
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5;1,6;1,7;1,8'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5;3,6;3,7;3,8'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5;4,6;4,7;4,8'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;6,3;6,4;6,5;6,6;6,7;6,8'), RuleItemMutex(self.question_data, '7,0;7,1;7,2;7,3;7,4;7,5;7,6;7,7;7,8'), RuleItemMutex(self.question_data, '8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5'), RuleItemMutex(self.question_data, '0,6;1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6'), RuleItemMutex(self.question_data, '0,7;1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7'), RuleItemMutex(self.question_data, '0,8;1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8'), RuleItemMutex(self.question_data, '0,0;0,1;0,2;1,0;1,1;1,2;2,0;2,1;2,2'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;4,0;4,1;4,2;5,0;5,1;5,2'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;7,0;7,1;7,2;8,0;8,1;8,2'), RuleItemMutex(self.question_data, '0,3;0,4;0,5;1,3;1,4;1,5;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,3;3,4;3,5;4,3;4,4;4,5;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '6,3;6,4;6,5;7,3;7,4;7,5;8,3;8,4;8,5'), RuleItemMutex(self.question_data, '0,6;0,7;0,8;1,6;1,7;1,8;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,6;3,7;3,8;4,6;4,7;4,8;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,6;6,7;6,8;7,6;7,7;7,8;8,6;8,7;8,8'), ] all_relations = [] # 先计算出所有相邻单元格关系,然后稍后再下方进行关系筛选,其余的最后做不等关系规则 for y in range(self.question_data.dimensionY): for x in range(self.question_data.dimensionX): if x < self.question_data.dimensionX - 1: all_relations.append( str(x) + ',' + str(y) + ';' + str(x + 1) + ',' + str(y)) if y < self.question_data.dimensionY - 1: all_relations.append( str(x) + ',' + str(y) + ';' + str(x) + ',' + str(y + 1)) for draw_function_data in self.question_data.draw_function_list: if draw_function_data.function_name == 'DLE': relation_direction = draw_function_data.parameters[0] for param_group in draw_function_data.data.split(';'): param_group_split = param_group.split(':') if len(param_group_split) > 1: for location_tag in param_group_split[0].split(','): # 将单元格tag转换成坐标,如A3 -> 2,0 location = [ int(location_tag[1]) - 1, ord(location_tag[0]) - 65 ] cell1 = '' cell2 = '' if relation_direction == 'R': cell1 = str(location[0]) + ',' + str( location[1]) cell2 = str(location[0] + 1) + ',' + str( location[1]) elif relation_direction == 'B': cell1 = str(location[0]) + ',' + str( location[1]) cell2 = str( location[0]) + ',' + str(location[1] + 1) rule_str = '' if param_group_split[1] == 'kongxinyuan': rule_str = 'abs(cell_value(' + cell1 + ') - cell_value(' + cell2 + ')) == 1' elif param_group_split[1] == 'shixinyuan': rule_str = 'max(cell_value(' + cell1 + '), cell_value(' + cell2 + ')) / ' + \ 'min(cell_value(' + cell1 + '), cell_value(' + cell2 + ')) == 2' if (cell1 + ';' + cell2) in all_relations: all_relations.remove(cell1 + ';' + cell2) self.question_data.rules_list.append( RuleFormulaCheck(self.question_data, rule_str)) for relation_str in all_relations: cell_items = relation_str.split(';') rule_str = '(abs(cell_value(' + cell_items[0] + ') - cell_value(' + cell_items[1] + ')) != 1)' + ' & ' + \ '(max(cell_value(' + cell_items[0] + '), cell_value(' + cell_items[1] + ')) / ' + \ 'min(cell_value(' + cell_items[0] + '), cell_value(' + cell_items[1] + ')) != 2)' self.question_data.rules_list.append( RuleFormulaCheck(self.question_data, rule_str)) self.question_data.rules_list.append( RuleFormulaCheck(self.question_data, rule_str))
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3'), RuleItemMutex(self.question_data, '0,0;1,0;0,1;1,1'), RuleItemMutex(self.question_data, '0,2;0,3;1,2;1,3'), RuleItemMutex(self.question_data, '2,0;2,1;3,0;3,1'), RuleItemMutex(self.question_data, '2,2;2,3;3,2;3,3'), ]
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;0,1;1,1;2,1'), RuleItemMutex(self.question_data, '3,0;4,0;5,0;3,1;4,1;5,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;0,3;1,3;2,3'), RuleItemMutex(self.question_data, '3,2;4,2;5,2;3,3;4,3;5,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;0,5;1,5;2,5'), RuleItemMutex(self.question_data, '3,4;4,4;5,4;3,5;4,5;5,5'), ]
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5;1,6;1,7;1,8'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5;3,6;3,7;3,8'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5;4,6;4,7;4,8'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;6,3;6,4;6,5;6,6;6,7;6,8'), RuleItemMutex(self.question_data, '7,0;7,1;7,2;7,3;7,4;7,5;7,6;7,7;7,8'), RuleItemMutex(self.question_data, '8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5'), RuleItemMutex(self.question_data, '0,6;1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6'), RuleItemMutex(self.question_data, '0,7;1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7'), RuleItemMutex(self.question_data, '0,8;1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8'), RuleItemMutex(self.question_data, '0,0;0,1;0,2;1,0;1,1;1,2;2,0;2,1;2,2'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;4,0;4,1;4,2;5,0;5,1;5,2'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;7,0;7,1;7,2;8,0;8,1;8,2'), RuleItemMutex(self.question_data, '0,3;0,4;0,5;1,3;1,4;1,5;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,3;3,4;3,5;4,3;4,4;4,5;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '6,3;6,4;6,5;7,3;7,4;7,5;8,3;8,4;8,5'), RuleItemMutex(self.question_data, '0,6;0,7;0,8;1,6;1,7;1,8;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,6;3,7;3,8;4,6;4,7;4,8;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,6;6,7;6,8;7,6;7,7;7,8;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,1;2,2;3,3;4,4;5,5;6,6;7,7;8,8'), RuleItemMutex(self.question_data, '8,0;7,1;6,2;5,3;4,4;3,5;2,6;1,7;0,8'), ]
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5;1,6;1,7;1,8'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5;3,6;3,7;3,8'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5;4,6;4,7;4,8'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;6,3;6,4;6,5;6,6;6,7;6,8'), RuleItemMutex(self.question_data, '7,0;7,1;7,2;7,3;7,4;7,5;7,6;7,7;7,8'), RuleItemMutex(self.question_data, '8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5'), RuleItemMutex(self.question_data, '0,6;1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6'), RuleItemMutex(self.question_data, '0,7;1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7'), RuleItemMutex(self.question_data, '0,8;1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8'), RuleItemMutex(self.question_data, '0,0;0,1;0,2;1,0;1,1;1,2;2,0;2,1;2,2'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;4,0;4,1;4,2;5,0;5,1;5,2'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;7,0;7,1;7,2;8,0;8,1;8,2'), RuleItemMutex(self.question_data, '0,3;0,4;0,5;1,3;1,4;1,5;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,3;3,4;3,5;4,3;4,4;4,5;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '6,3;6,4;6,5;7,3;7,4;7,5;8,3;8,4;8,5'), RuleItemMutex(self.question_data, '0,6;0,7;0,8;1,6;1,7;1,8;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,6;3,7;3,8;4,6;4,7;4,8;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,6;6,7;6,8;7,6;7,7;7,8;8,6;8,7;8,8'), ] for draw_function_data in self.question_data.draw_function_list: if (draw_function_data.data is None) | (draw_function_data.data == ''): continue if draw_function_data.function_name == 'DLE': relation_direction = draw_function_data.parameters[0] for param_group in draw_function_data.data.split(';'): param_group_split = param_group.split(':') if len(param_group_split) > 1: for location_tag in param_group_split[0].split(','): # 将单元格tag转换成坐标,如A3 -> 2,0 location = [int(location_tag[1]) - 1, ord(location_tag[0]) - 65] cell1 = '' cell2 = '' if relation_direction == 'R': cell1 = str(location[0]) + ',' + str(location[1]) cell2 = str(location[0] + 1) + ',' + str(location[1]) elif relation_direction == 'B': cell1 = str(location[0]) + ',' + str(location[1]) cell2 = str(location[0]) + ',' + str(location[1] + 1) rule_str = 'cell_value(' + cell1 + ') * cell_value(' + cell2 + ') == ' + param_group_split[ 1] self.question_data.rules_list.append(RuleFormulaCheck(self.question_data, rule_str))
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5;1,6;1,7;1,8'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5;3,6;3,7;3,8'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5;4,6;4,7;4,8'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;6,3;6,4;6,5;6,6;6,7;6,8'), RuleItemMutex(self.question_data, '7,0;7,1;7,2;7,3;7,4;7,5;7,6;7,7;7,8'), RuleItemMutex(self.question_data, '8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5'), RuleItemMutex(self.question_data, '0,6;1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6'), RuleItemMutex(self.question_data, '0,7;1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7'), RuleItemMutex(self.question_data, '0,8;1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8'), RuleItemMutex(self.question_data, '0,0;0,1;0,2;1,0;1,1;1,2;2,0;2,1;2,2'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;4,0;4,1;4,2;5,0;5,1;5,2'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;7,0;7,1;7,2;8,0;8,1;8,2'), RuleItemMutex(self.question_data, '0,3;0,4;0,5;1,3;1,4;1,5;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,3;3,4;3,5;4,3;4,4;4,5;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '6,3;6,4;6,5;7,3;7,4;7,5;8,3;8,4;8,5'), RuleItemMutex(self.question_data, '0,6;0,7;0,8;1,6;1,7;1,8;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,6;3,7;3,8;4,6;4,7;4,8;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,6;6,7;6,8;7,6;7,7;7,8;8,6;8,7;8,8'), ] # 读取Excel中所有DBG函数,生成互斥规则 for draw_function_data in self.question_data.draw_function_list: if draw_function_data.function_name == 'DBG': cells_list = [] for location_tag in draw_function_data.data.split(','): # 将单元格tag转换成坐标,如A3 -> 2,0 location = [ int(location_tag[1]) - 1, ord(location_tag[0]) - 65 ] cell = str(location[0]) + ',' + str(location[1]) cells_list.append(cell) self.question_data.rules_list.append( RuleItemMutex(self.question_data, ';'.join(cells_list)))
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5;1,6;1,7;1,8'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5;3,6;3,7;3,8'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5;4,6;4,7;4,8'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;6,3;6,4;6,5;6,6;6,7;6,8'), RuleItemMutex(self.question_data, '7,0;7,1;7,2;7,3;7,4;7,5;7,6;7,7;7,8'), RuleItemMutex(self.question_data, '8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5'), RuleItemMutex(self.question_data, '0,6;1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6'), RuleItemMutex(self.question_data, '0,7;1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7'), RuleItemMutex(self.question_data, '0,8;1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8'), RuleItemMutex(self.question_data, '0,0;0,1;0,2;1,0;1,1;1,2;2,0;2,1;2,2'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;4,0;4,1;4,2;5,0;5,1;5,2'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;7,0;7,1;7,2;8,0;8,1;8,2'), RuleItemMutex(self.question_data, '0,3;0,4;0,5;1,3;1,4;1,5;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,3;3,4;3,5;4,3;4,4;4,5;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '6,3;6,4;6,5;7,3;7,4;7,5;8,3;8,4;8,5'), RuleItemMutex(self.question_data, '0,6;0,7;0,8;1,6;1,7;1,8;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,6;3,7;3,8;4,6;4,7;4,8;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,6;6,7;6,8;7,6;7,7;7,8;8,6;8,7;8,8'), ] for y in range(3): for x in range(3): rule_str = '' for ys in [0, 3, 6]: for xs in [0, 3, 6]: rule_str = rule_str + str(x + xs) + ',' + str(y + ys) + ';' self.question_data.rules_list.append(RuleItemMutex(self.question_data, rule_str))
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;0,1;1,1;2,1'), RuleItemMutex(self.question_data, '3,0;4,0;5,0;3,1;4,1;5,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;0,3;1,3;2,3'), RuleItemMutex(self.question_data, '3,2;4,2;5,2;3,3;4,3;5,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;0,5;1,5;2,5'), RuleItemMutex(self.question_data, '3,4;4,4;5,4;3,5;4,5;5,5'), ] for y in range(self.question_data.dimensionY - 1): for x in range(self.question_data.dimensionX - 1): rule_str = str(x) + ',' + str(y) + ';' + str(x + 1) + ',' + str(y + 1) self.question_data.rules_list.append( RuleItemMutex(self.question_data, rule_str)) rule_str = str(x) + ',' + str(y + 1) + ';' + str(x + 1) + ',' + str(y) self.question_data.rules_list.append( RuleItemMutex(self.question_data, rule_str))
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5;1,6;1,7;1,8'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5;3,6;3,7;3,8'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5;4,6;4,7;4,8'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;6,3;6,4;6,5;6,6;6,7;6,8'), RuleItemMutex(self.question_data, '7,0;7,1;7,2;7,3;7,4;7,5;7,6;7,7;7,8'), RuleItemMutex(self.question_data, '8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5'), RuleItemMutex(self.question_data, '0,6;1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6'), RuleItemMutex(self.question_data, '0,7;1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7'), RuleItemMutex(self.question_data, '0,8;1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8'), RuleItemMutex(self.question_data, '0,0;0,1;0,2;1,0;1,1;1,2;2,0;2,1;2,2'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;4,0;4,1;4,2;5,0;5,1;5,2'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;7,0;7,1;7,2;8,0;8,1;8,2'), RuleItemMutex(self.question_data, '0,3;0,4;0,5;1,3;1,4;1,5;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,3;3,4;3,5;4,3;4,4;4,5;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '6,3;6,4;6,5;7,3;7,4;7,5;8,3;8,4;8,5'), RuleItemMutex(self.question_data, '0,6;0,7;0,8;1,6;1,7;1,8;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,6;3,7;3,8;4,6;4,7;4,8;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,6;6,7;6,8;7,6;7,7;7,8;8,6;8,7;8,8'), ] # 读取Excel中所有DBG函数,生成奇数灰格子的互斥规则 for draw_function_data in self.question_data.draw_function_list: if draw_function_data.function_name == 'DOE': line_list = draw_function_data.data.split(';') if len(line_list) == 2: if draw_function_data.parameters[0] is 'T': num_list = line_list[0].split(':')[0].split[','] arrow_list = line_list[1].split(':')[0].split[','] arrow_index = 0 for arrow in arrow_list: if arrow is not '0': rule_str = '' arrow_index = arrow_index + 1
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5;1,6;1,7;1,8'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5;3,6;3,7;3,8'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5;4,6;4,7;4,8'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;6,3;6,4;6,5;6,6;6,7;6,8'), RuleItemMutex(self.question_data, '7,0;7,1;7,2;7,3;7,4;7,5;7,6;7,7;7,8'), RuleItemMutex(self.question_data, '8,0;8,1;8,2;8,3;8,4;8,5;8,6;8,7;8,8'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1;6,1;7,1;8,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3;6,3;7,3;8,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4;6,4;7,4;8,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5'), RuleItemMutex(self.question_data, '0,6;1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6'), RuleItemMutex(self.question_data, '0,7;1,7;2,7;3,7;4,7;5,7;6,7;7,7;8,7'), RuleItemMutex(self.question_data, '0,8;1,8;2,8;3,8;4,8;5,8;6,8;7,8;8,8'), RuleItemMutex(self.question_data, '0,0;0,1;0,2;1,0;1,1;1,2;2,0;2,1;2,2'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;4,0;4,1;4,2;5,0;5,1;5,2'), RuleItemMutex(self.question_data, '6,0;6,1;6,2;7,0;7,1;7,2;8,0;8,1;8,2'), RuleItemMutex(self.question_data, '0,3;0,4;0,5;1,3;1,4;1,5;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,3;3,4;3,5;4,3;4,4;4,5;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '6,3;6,4;6,5;7,3;7,4;7,5;8,3;8,4;8,5'), RuleItemMutex(self.question_data, '0,6;0,7;0,8;1,6;1,7;1,8;2,6;2,7;2,8'), RuleItemMutex(self.question_data, '3,6;3,7;3,8;4,6;4,7;4,8;5,6;5,7;5,8'), RuleItemMutex(self.question_data, '6,6;6,7;6,8;7,6;7,7;7,8;8,6;8,7;8,8'), ] # 读取Excel中所有DBG函数,根据箭头方向生成寻9规则公式 for draw_function_data in self.question_data.draw_function_list: if draw_function_data.function_name == 'DBG': for location_tag in draw_function_data.data.split(','): # 将单元格tag转换成坐标,如A3 -> 2,0 location = [int(location_tag[1]) - 1, ord(location_tag[0]) - 65] cell1 = str(location[0]) + ',' + str(location[1]) if draw_function_data.parameters[0] == '69up': rule_str = 'cell_value(' + str(location[0]) + ',(' + str(location[1]) + '- cell_value(' + cell1 + ')' + ')) == 9' self.question_data.rules_list.append(RuleFormulaCheck(self.question_data, rule_str)) elif draw_function_data.parameters[0] == '69down': rule_str = 'cell_value(' + str(location[0]) + ',(' + str(location[1]) + '+ cell_value(' + cell1 + ')' + ')) == 9' self.question_data.rules_list.append(RuleFormulaCheck(self.question_data, rule_str)) elif draw_function_data.parameters[0] == '69left': rule_str = 'cell_value(' + str('(' + str(location[0]) + '- cell_value(' + cell1 + ')' + '),' + str(location[1])) + ') == 9' self.question_data.rules_list.append(RuleFormulaCheck(self.question_data, rule_str)) elif draw_function_data.parameters[0] == '69right': rule_str = 'cell_value(' + str('(' + str(location[0]) + '+ cell_value(' + cell1 + ')' + '),' + str(location[1])) + ') == 9' self.question_data.rules_list.append(RuleFormulaCheck(self.question_data, rule_str))
def calculate_rules(self): super().calculate_rules() self.question_data.rules_list = [ RuleItemMutex(self.question_data, '0,0;0,1;0,2;0,3;0,4;0,5'), RuleItemMutex(self.question_data, '1,0;1,1;1,2;1,3;1,4;1,5'), RuleItemMutex(self.question_data, '2,0;2,1;2,2;2,3;2,4;2,5'), RuleItemMutex(self.question_data, '3,0;3,1;3,2;3,3;3,4;3,5'), RuleItemMutex(self.question_data, '4,0;4,1;4,2;4,3;4,4;4,5'), RuleItemMutex(self.question_data, '5,0;5,1;5,2;5,3;5,4;5,5'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;3,0;4,0;5,0'), RuleItemMutex(self.question_data, '0,1;1,1;2,1;3,1;4,1;5,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;3,2;4,2;5,2'), RuleItemMutex(self.question_data, '0,3;1,3;2,3;3,3;4,3;5,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;3,4;4,4;5,4'), RuleItemMutex(self.question_data, '0,5;1,5;2,5;3,5;4,5;5,5'), RuleItemMutex(self.question_data, '0,0;1,0;2,0;0,1;1,1;2,1'), RuleItemMutex(self.question_data, '3,0;4,0;5,0;3,1;4,1;5,1'), RuleItemMutex(self.question_data, '0,2;1,2;2,2;0,3;1,3;2,3'), RuleItemMutex(self.question_data, '3,2;4,2;5,2;3,3;4,3;5,3'), RuleItemMutex(self.question_data, '0,4;1,4;2,4;0,5;1,5;2,5'), RuleItemMutex(self.question_data, '3,4;4,4;5,4;3,5;4,5;5,5'), ] for y in range(2): for x in range(3): rule_str = '' for ys in [0, 2, 4]: for xs in [0, 3]: rule_str = rule_str + str(x + xs) + ',' + str(y + ys) + ';' self.question_data.rules_list.append( RuleItemMutex(self.question_data, rule_str))