Exemplo n.º 1
0
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
Exemplo n.º 2
0
 def __init__(self):
     self.patterns = []
     self.pattern_size = 1
     self.upgrade_patterns(self.pattern_size)
     self.pc = SuperPrime(1000000)
Exemplo n.º 3
0
    return s


# **************************************************
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))