Find the greatest product of five consecutive digits in the 1000-digit number.
7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
For a change, this is quite a no-brainer. I saved the number in the original format of individual lines as a txt file and used a memStream to read it. Although I could have just as well used fileStream, this is supposed to be a little faster. The sole purpose of the _int function is to shorten the code later on. All the lines are appended to a string (using stringStream didn't result in any benefit), which is then iterated over and for each five numbers a product is calculated and assigned to a midResult variable. If it is bigger than a previously saved value, we replace it with it:
(fn _int str =nr = str as integerfn getNum filePath =(local result = ""local fileStream = memStreamMgr.openFile filePathwhile NOT fileStream.eos() doappend result (fileStream.readLine())memStreamMgr.close fileStreamresult)local nr = getNum "Z:\Euler\prob8.txt"local length = nr.count - 4local midResult, result = 0for i = 1 to lengthwhere (midResult = _int(nr[i])*_int(nr[i+1])*_int(nr[i+2])*_int(nr[i+3])*_int(nr[i+4])) > result doresult = midResultresult)
DISCLAIMER: All scripts and snippets are provided as is under Creative Commons Zero (public domain, no restrictions) license. The author and this blog cannot be held liable for any loss caused as a result of inaccuracy or error within these web pages. Use at your own risk.


This Post needs Your Comment!
Great readingg
Leave a Comment