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%.
// 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]
I’m an AWS Serverless Hero and the author of Production-Ready Serverless. I have run production workload at scale in AWS for nearly 10 years and I have been an architect or principal engineer with a variety of industries ranging from banking, e-commerce, sports streaming to mobile gaming. I currently work as an independent consultant focused on AWS and serverless.
Here is a complete list of all my posts on serverless and AWS Lambda. In the meantime, here are a few of my most popular blog posts.
- Lambda optimization tip – enable HTTP keep-alive
- You are thinking about serverless costs all wrong
- Many faced threats to Serverless security
- We can do better than percentile latencies
- I’m afraid you’re thinking about AWS Lambda cold starts all wrong
- Yubl’s road to Serverless
- AWS Lambda – should you have few monolithic functions or many single-purposed functions?
- AWS Lambda – compare coldstart time with different languages, memory and code sizes
- Guys, we’re doing pagination wrong