I'm currently trying to do some of the Project Euler questions. I'm currently on question 8 and I'm using python to solve it.
I made some code and got an answer, which turns out to be incorrect. I'm not sure what the problem is with my code, so I'd be grateful is someone could tell me what the issue is. I'm getting an answer of 56435097600, which is the 13 numbers multiplied together on the 30th column with an offset of 6, so it starts 7894... Here's my code, it's not very efficient or neat, but I just want to know what the issue is, not change my code to make it neater/more effective.
rows = ['73167176531330624919225119674426574742355349194934','96983520312774506326239578318016984801869478851843','85861560789112949495459501737958331952853208805511',
'12540698747158523863050715693290963295227443043557','66896648950445244523161731856403098711121722383113','62229893423380308135336276614282806444486645238749',
'30358907296290491560440772390713810515859307960866','70172427121883998797908792274921901699720888093776','65727333001053367881220235421809751254540594752243',
'52584907711670556013604839586446706324415722155397','53697817977846174064955149290862569321978468622482','83972241375657056057490261407972968652414535100474',
'82166370484403199890008895243450658541227588666881','16427171479924442928230863465674813919123162824586','17866458359124566529476545682848912883142607690042',
'24219022671055626321111109370544217506941658960408','07198403850962455444362981230987879927244284909188','84580156166097919133875499200524063689912560717606',
'05886116467109405077541002256983155200055935729725','71636269561882670428252483600823257530420752963450',]
columns = []
def createcolumns():
global rows,columns
for x in range(0,50):
tempvalue = ''
for j in range(0,20):
tempvalue = tempvalue + rows[j][x]
columns.append(tempvalue)
def multiply(string):
tempvalue = 1
for letters in string:
tempvalue *= int(letters)
return tempvalue
def highestnumber():
global rows,columns
highest = 0
# 37 ways per row * 20 + 7 ways per column * 50
for x in range(0,20):
for g in range(0,37):
tempvalue = ''
for j in range(0,13):
tempvalue = tempvalue + rows[x][j+g]
tempvalue = multiply(tempvalue)
if(tempvalue > highest):
highest = tempvalue
for x in range(0,50):
for g in range(0,7):
tempvalue = ''
for j in range(0,13):
tempvalue = tempvalue + columns[x][j+g]
tempvalue = multiply(tempvalue)
if(tempvalue > highest):
highest = tempvalue
return highest
createcolumns()
print(highestnumber())
Output:
>> 56435097600
Well, the purpose is to solve this yourself.
However, I would like to point out the flaw in your understanding of this question and you can pick up from there.
The question talks about a "1000 digit" number.
That means, all the 20 rows of 50 digits need to be merged into 1 single number of 1000 digits.
It's been given in a matrix form just for good visibility.
So approaching this problem with rows X columns may not help.
Your logic would work well for the 4 digit number since it is all in 1 row.
And since your logic's failing for a 13 digit number, my guess is that the 13 digits do not fall in 1 single row.
If I'm not wrong.
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments