Project Euler – Problem 53 Solution

Yan Cui

I help clients go faster for less using serverless technologies.

Problem

There are exactly ten ways of selecting three from five, 12345:

123, 124, 125, 134, 135, 145, 234, 235, 245, and 345

In combinatorics, we use the notation, 5C3 = 10.

In general,

image

It is not until n = 23, that a value exceeds one-million: 23C10 = 1144066.

How many, not necessarily distinct, values of  nCr, for 1 <= n <= 100, are greater than one-million?

Solution

let factorial n = if (n = 0I) then 1I else [1I..n] |> List.reduce (*)

let C n r = if r <= n then (factorial n) / ((factorial r) * (factorial (n - r))) else 0I

let answer =
    &#91;1I..100I&#93;
    |> List.collect (fun n -> [1I..n] |> List.map (fun r -> C n r))
    |> List.filter (fun x -> x > 1000000I)
    |> List.length

Whenever you’re ready, here are 3 ways I can help you:

  1. Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop to level up your serverless skills quickly.
  2. Do you want to know how to test serverless architectures with a fast dev & test loop? Check out my latest course, Testing Serverless Architectures and learn the smart way to test serverless.
  3. I help clients launch product ideas, improve their development processes and upskill their teams. If you’d like to work together, then let’s get in touch.

Leave a Comment

Your email address will not be published. Required fields are marked *