Yan Cui

I help clients go faster for less using serverless technologies.

**This article is brought to you by**

**Is your CI build step taking too long?** Try Depot for free today and experience up to **40x faster build speed**!

#### Problem

Working from left-to-right if no digit is exceeded by the digit to its left it is called an increasing number; for example, 134468.

Similarly if no digit is exceeded by the digit to its right it is called a decreasing number; for example, 66420.

We shall call a positive integer that is neither increasing nor decreasing a “bouncy” number; for example, 155349.

Clearly there cannot be any bouncy numbers below one-hundred, but just over half of the numbers below one-thousand (525) are bouncy. In fact, the least number for which the proportion of bouncy numbers first reaches 50% is 538.

Surprisingly, bouncy numbers become more and more common and by the time we reach 21780 the proportion of bouncy numbers is equal to 90%.

Find the least number for which the proportion of bouncy numbers is exactly 99%.

#### Solution

// define function f which compares the sorted and original digits of the supplied

// number n and returns if they’re the same

let f (sort:int[] -> int[]) (n:int) =

let digits = n.ToString().ToCharArray() |> Array.map (fun c -> int(c.ToString()))

not(digits |> Seq.exists2 (fun e e’ -> e <> e’) (sort digits))

// curry the function f to form the isIncreasing and isDecreasing functions

let isIncreasing = f (fun l -> Array.sort l)

let isDecreasing = f (fun l -> Array.sortBy (fun x -> 1 – x) l)

let isBouncy n = not(isIncreasing n) && not(isDecreasing n)

let answer =

let mutable bouncyCount, bouncyRatio, n = 0, 0.0, 100

while bouncyRatio <> 0.99 do

n <- n+1
if isBouncy n then
bouncyCount <- bouncyCount+1
bouncyRatio <- double(bouncyCount)/double(n)
n
[/code]

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

**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 for**quickly levelling up your serverless skills**.- 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. - 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**. **Join my community on Discord**, ask questions, and join the discussion on all things AWS and Serverless.