Solving Project Euler problems as a way to learn F#.

Click here for additional resources.

Solving Project Euler problems as a way to learn F#.

Click here for additional resources.

Showing posts from 2016

- Get link
- Other Apps

- Get link
- Other Apps

Problem An irrational decimal fraction is created by concatenating the positive integers: 0.12345678910 It can be seen that the 12 th digit of the fractional part is 1. If d n represents the n th digit of the fractional part, find the value of the following expression. d 1 x d 10 x d 100 x d 1000 x d 10000 x d 100000 x d 1000000 Original Problem Source Solution //speed depends on using StringBuilder, non-idiomatic since it is mutable let rec NumArray start max maxLength (numString:System.Text.StringBuilder) = if start = max || numString.Length >= maxLength then numString.Append(start.ToString()) else let newString = numString.Append(start.ToString()) let nextNum = start + 1 NumArray nextNum max maxLength newString //cast string to int let convertStringToInt32 (value:string) = let mutable result = 0 let found = System.Int32.Try

- Get link
- Other Apps

Problem In England the currency is made up of pound, £, and pence, p, and there are eight coins in general circulation: 1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p). It is possible to make £2 in the following way: 1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p How many different ways can £2 be made using any number of coins? Original problem description... Note This is a clean, although slow, solution, taking longer than one minute to complete. Solution // code for finding result, returned as a sequence let sumCurrencies ones twos fives tens twenties fifties oneHundreds twoHundreds limit = //seq{ [let counter = 0 for twoHundred in twoHundreds do for oneHundred in oneHundreds do for fifty in fifties do for twenty in twenties do for ten in tens do for five in fives do

- Get link
- Other Apps

Poblem If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exactly three solutions for p = 120. {20,48,52}, {24,45,51}, {30,40,50} For which value of p ≤ 1000, is the number of solutions maximised? Link to original problem description Solution open System let buildArrays xs ys zs limits = seq{ for x in xs do for y in ys do if x < y then for z in zs do if (x*x + y*y = z*z) then for limit in limits do if (x + y + z = limit) then yield limit, x, y, z} let First (a,b,c,d) = a let pyhtosArrays = buildArrays [1..999] [1..999] [1..999] [1..999] |> Seq.toList |> List.map (fun x -> First x) let results = pyhtosArrays |> Seq.countBy id

- Get link
- Other Apps

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 open System let product xs ys = seq{for x in xs do for y in ys do let a = float x % float 10

- Get link
- Other Apps