2019-07-18 20:23:44 +02:00
|
|
|
from itertools import combinations
|
|
|
|
from lib_prime import primes, is_prime
|
|
|
|
|
|
|
|
|
|
|
|
def concatenate_all(numbers):
|
|
|
|
result = []
|
|
|
|
for a, b in combinations(numbers, 2):
|
|
|
|
result.append([a, b])
|
|
|
|
result.append([b, a])
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
def concatentation_is_prime(a, b):
|
|
|
|
ab = int(str(a) + str(b))
|
|
|
|
ba = int(str(b) + str(a))
|
|
|
|
if is_prime(ab) and is_prime(ba):
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
return False
|
|
|
|
|
2019-07-18 03:29:59 +02:00
|
|
|
|
|
|
|
def euler_060():
|
2019-07-18 20:23:44 +02:00
|
|
|
""" Hahaha. I have no idea what I was thinking
|
|
|
|
when writing this code. Beautiful! """
|
|
|
|
potentials = []
|
|
|
|
new_potentials = []
|
|
|
|
done = False
|
|
|
|
for p in primes(100000):
|
|
|
|
if done:
|
|
|
|
break
|
|
|
|
potentials += new_potentials
|
|
|
|
new_potentials = []
|
|
|
|
for potential in potentials:
|
|
|
|
all_concatenations_prime = True
|
|
|
|
for prime in potential:
|
|
|
|
if not concatentation_is_prime(p, prime):
|
|
|
|
all_concatenations_prime = False
|
|
|
|
break
|
|
|
|
if all_concatenations_prime:
|
|
|
|
new_potential = list(potential)
|
|
|
|
new_potential.append(p)
|
|
|
|
if len(new_potential) > 4:
|
|
|
|
# print(new_potential)
|
|
|
|
s = sum(new_potential)
|
|
|
|
done = True
|
|
|
|
break
|
|
|
|
new_potentials.append(new_potential)
|
|
|
|
if p < 15:
|
|
|
|
potentials.append([p])
|
|
|
|
return s
|
2019-07-18 03:29:59 +02:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
print("e060.py: " + str(euler_060()))
|
2019-07-18 20:23:44 +02:00
|
|
|
assert(euler_060() == 26033)
|