I was exploring Jupyter notebooks , that combines live code, markdown and data, through Microsoft's implementation, known as MS Azure Notebooks , putting together a small library of R and F# notebooks . As Microsoft's FAQ for the service describes it as : ...a multi-lingual REPL on steroids. This is a free service that provides Jupyter notebooks along with supporting packages for R, Python and F# as a service. This means you can just login and get going since no installation/setup is necessary. Typical usage includes schools/instruction, giving webinars, learning languages, sharing ideas, etc. Feel free to clone and comment... In R Azure Workbook for R - Memoisation and Vectorization Charting Correlation Matrices in R In F# Charnownes Constant in FSharp.ipynb Project Euler - Problems 18 and 67 - FSharp using Dynamic Programming
Problem
The fraction 49/98 is a curious fraction, as an inexperienced mathematician in attempting to simplify it may incorrectly believe that 49/98 = 4/8, which is correct, is obtained by cancelling the 9s.
We shall consider fractions like, 30/50 = 3/5, to be trivial examples.
There are exactly four non-trivial examples of this type of fraction, less than one in value, and containing two digits in the numerator and denominator. If the product of these four fractions is given in its lowest common terms, find the value of the denominator.
(link to Problem 33 on the Project Euler site)
Note
This is a somewhat crude solution, since I am only just getting back into solving these problems, or working with F#, but there are several similar problems for which I can develop properly factored, reusable functions.
Solution
The fraction 49/98 is a curious fraction, as an inexperienced mathematician in attempting to simplify it may incorrectly believe that 49/98 = 4/8, which is correct, is obtained by cancelling the 9s.
We shall consider fractions like, 30/50 = 3/5, to be trivial examples.
There are exactly four non-trivial examples of this type of fraction, less than one in value, and containing two digits in the numerator and denominator. If the product of these four fractions is given in its lowest common terms, find the value of the denominator.
(link to Problem 33 on the Project Euler site)
Note
This is a somewhat crude solution, since I am only just getting back into solving these problems, or working with F#, but there are several similar problems for which I can develop properly factored, reusable functions.
Solution
open System
let product xs ys = seq{for x in xs do
for y in ys do
let a = float x % float 10
let b = System.Math.Floor(float y / float 10)
let c = (float x - a) / float 10
let d = float y - (b * float 10)
if a = b && x < y && (c/d = float x / float y) then
yield x, y}
let fstList = product [11..99] [11..99] |> Seq.toList |> List.map (fun x -> fst x)
let sndList = product [11..99] [11..99] |> Seq.toList |> List.map (fun x -> snd x)
let fstProd = fstList.[0] * fstList.[1] * fstList.[2] * fstList.[3]
let sndProd = sndList.[0] * sndList.[1] * sndList.[2] * sndList.[3]
let result = float fstProd / float sndProd
Comments
Post a Comment