class Truc(object): def __init__(self): self.patterns = [] self.pattern_size = 1 self.upgrade_patterns(self.pattern_size) self.pc = SuperPrime(1000000) @staticmethod def replace(list_n, pattern, a): result = 0 for i in range(len(list_n)): result *= 10 if not pattern[i]: result += list_n[i] else: result += a return result def upgrade_patterns(self, size): self.pattern_size = size self.patterns = [] self.gen_pattern(self.pattern_size, []) # print(self.patterns) def gen_pattern(self, n, current): if n <= 0: if self.check_pattern(current): self.patterns.append(current) else: l1 = current[:] l1.append(True) l2 = current[:] l2.append(False) self.gen_pattern(n-1, l1) self.gen_pattern(n-1, l2) @staticmethod def check_pattern(pattern): """ We have to replace at least one digit @param pattern: @return: True is we replace one or more digit, false otherwise """ for boolean in pattern: if boolean: return True return False def score(self, n): list_n = toList(n) if len(list_n) > len(self.patterns[0]): self.upgrade_patterns(len(list_n)) max_score = 0 min_prime = n**2 for pattern in self.patterns: # print(pattern) local_score = 0 local_min = min_prime for i in range(10): replaced = self.replace(list_n, pattern, i) if replaced >= n and self.pc.prime(replaced): # print(replaced) local_min = min(local_min, replaced) local_score += 1 # print(local_score) if local_score > max_score: max_score = local_score min_prime = local_min return max_score, min_prime
def tests(): print("True = %s" % test_property([3, 7, 109], 673)) print("False = %s" % test_property([3, 7, 109], 674)) print("True = %s" % test_property([], 3)) print("True = %s" % test_property([], 3)) # ************************************************** start_time = time() lim = 10000 pc = SuperPrime(lim**2) pl = [2] for n in range(3, 10000, 2): if pc.prime(n): pl.append(n) # print(len(pl)) print(time() - start_time) start_time = time() # tests() result = find_set([], 0, pl) print(result) print(sum_list(result)) print(time() - start_time)