Jump to content

Project euler 8

Wictorian

 
a = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
consequences = []
multiplications = []
for i in range(987):
    consequences.append(int(str(a)[i:i+13]))
for t in consequences:
    b = 0
    c = 1
    for x in str(t):
        if b > 0:
            c *= int(x)
        b+=1
    multiplications.append(c)
print(sorted(multiplications))

I wrote this script but it returns wrong answer, I couln't debug furthermore, can you spot the problem?

 

Also, I just wanna thank all the members for making a good community, unlike stackoverflow.

Link to comment
Share on other sites

Link to post
Share on other sites

As pointed out above, the 1000-digit number needs to be declared as a string, and you need to iterate over the string. This is a theme for the more difficult problems later on, where you will need to perform operations involving multiple large numbers that cannot be represented as an int.

 

A couple other problems with your code:

  • There's no need to sort. You just keep track of the largest product and print that out at the end.
  • You seem to be skipping the multiplication of first index of each substring by only multiplying when b > 0.
a = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
x = 0
for i in range(len(a) - 13):
    temp = 1
    for j in range(13):
        temp *= int(a[i + j]) 
    if temp > x:
        x = temp
print(x)
Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, badreg said:

 

  • You seem to be skipping the multiplication of first index of each substring by only multiplying when b > 0.

I don't think it is wrıng. Because otherways wouldn't it get the square of the first index?

Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, Wictorian said:

I don't think it is wrıng. Because otherways wouldn't it get the square of the first index?

You can either set c = substring[0] and skip multiplication or set c = 1 and do the multiplication.

 

In your original code, you are setting c = 1 and skipping the first multiplication, which will lead to an incorrect answer.

Link to comment
Share on other sites

Link to post
Share on other sites

10 hours ago, badreg said:

You can either set c = substring[0] and skip multiplication or set c = 1 and do the multiplication.

 

In your original code, you are setting c = 1 and skipping the first multiplication, which will lead to an incorrect answer.

Thanks, it worked. I guess I had forgetten I had implemented one of them while doing the other one.

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×