Project Euler 128: Find the 2000th hexagonal tile in which the differences between it and its 6 neighbors yield 3 primes.
Problem Description
A hexagonal tile with number 1 is surrounded by a ring of six hexagonal tiles, starting at "12 o’clock" and numbering the tiles 2 to 7 in an anticlockwise direction.
New rings are added in the same fashion, with the next rings being numbered 8 to 19, 20 to 37, 38 to 61, and so on. The diagram below shows the first three rings.
By finding the difference between tile n and each its six neighbours we shall define PD(n) to be the number of those differences which are prime.
For example, working clockwise around tile 8 the differences are 12, 29, 11, 6, 1, and 13. So PD(8) = 3.
In the same way, the differences around tile 17 are 1, 17, 16, 1, 11, and 10, hence PD(17) = 2.
It can be shown that the maximum value of PD(n) is 3.
If all of the tiles for which PD(n) = 3 are listed in ascending order to form a sequence, the 10th tile would be 271.
Find the 2000th tile in this sequence.
Analysis
This is a modified version of the solution for probelm 58 – The square spiral – as this is a hex spiral constructed in the same way. As you may have guessed, just like ignoring the bottomright diagonal in the square spiral, there are many directions we can ignore here as well as they always yield a nonprime difference (both even or both odd).
The solution below is a first swing at finding a solution. The real task is to learn of the generating function that will replace this brute force search.
Project Euler 128 Solution
Runs < 0.550 seconds in Python 2.7.Use this link to get the Project Euler 128 Solution Python 2.7 source.
Afterthoughts

No afterthoughts yet.
weight=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
happy=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
tothap=0
for i in range(len(items)):
weight[i] = items[i][0]
print weight
for o in range(len(items)):
happy[o] = items[o][1]
print happy
for j in range(len(weight)):
for k in range(j+1,len(weight)):
for l in range(k+1,len(weight)):
if(weight[j]+weight[k]+weight[l]) tothap:
tothap=happy[j]+happy[k]+happy[l]
print ‘tothap:’,tothap
#print weight[j], weight[k], weight[l]
#if happy[j]+happy[k]+happy[l] > tothap :
for j in range(len(weight)):
for k in range(j+1,len(weight)):
if(weight[j]+weight[k]) tothap:
tothap=happy[j]+happy[k]
print ‘tothap:’,tothap
for j in range(len(weight)):
if weight[j] tothap:
tothap=happy[j]
print ‘tothap:’,tothap
print ‘tothap:’,tothap