This question was presented to me, adapted from Project Euler #8. The goal is to find the N adjacent digits in the 1000-digit number that have the greatest product. Range of N: 10 <= N <= 50. Not only I have to find the max product of 13 consecutive digits in a sequence, I also had to find the max product of 19, 35, 46. This is really no biggie, just scaling up from the previous 13. Anyway, I set out to code two solutions, one which is done by a generator ( I love these efficient things, so useful in Project Euler) and another which I would describe it as code I written before I knew about generators.
Code 1 (Generator):
number=7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
def largestproduct(adjdigit):
x=0
y=adjdigit
z=str(number)[x:y]
product=1
count=0
while y<=1000:
for i in z:
if count==adjdigit:
yield product
product=1
count=0
x+=1
y+=1
z=str(number)[x:y]
product*=int(i)
count+=1
print(max(largestproduct(13)))
Code 2 (Non-generator):
number=7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
def largestproduct(adjdigit):
x=0
y=adjdigit
z=str(number)[x:y]
product=1
count=0
control=0
while y<=1000:
for i in z:
if count==adjdigit:
if product>control:
control=product
product=1
count=0
x+=1
y+=1
z=str(number)[x:y]
product*=int(i)
count+=1
return control
print(largestproduct(19))
Which one would be better and more efficient to use? To me, generators are always the best due to them lacking the need to occupy tons of space in memory when processing large amounts of data. Oh and please suggest improvements, and cool functions and tools that can be useful from other Python packages.