Project Euler 8: Getting Incorrect Answer From Code

user9398578

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
murphy1310

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.

edited at
0

Comments

0 comments
Login to comment

Related