I am trying to solve the Project Euler #8. Here is my solution:
open System
let product_of_digits num =
Seq.fold (fun acc elem -> acc * elem) 1 [for x in num -> int32(x) - 48]
let all_possible_strings number =
[ for x in [0 .. number.Length - 2] -> number.Substring(x, 2) ]
let problem_8 number =
Seq.max(
Seq.map (fun x -> (product_of_digits x)) (all_possible_strings number)
)
[<EntryPoint>]
let main(args : string[]) =
printfn "result = %d" (problem_8 "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450")
0
All works fine in Fsi.exe, but when I am trying to compile the code I have got error:
D:\datahub\Dropbox\development\myprojects\project-euler\Problem_8\problem_8.fs(7,22): error FS0072: Lookup on object of
indeterminate type based on information prior to this program point. A type annotation may be needed prior to this progr
am point to constrain the type of the object. This may allow the lookup to be resolved.
D:\datahub\Dropbox\development\myprojects\project-euler\Problem_8\problem_8.fs(7,44): error FS0072: Lookup on object of
indeterminate type based on information prior to this program point. A type annotation may be needed prior to this progr
am point to constrain the type of the object. This may allow the lookup to be resolved.
How can I fix it?
For further insight, the reason why the F# compiler is having difficulty inferring the type of number in all_possible_strings is because you are using .NET object oriented instance properties and methods on number, which don't give enough information about the type. However, you can swap out the property call number.Length for the F# function application String.length number which cascades so that now all functions and parameters will be fully inferred.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With