From d8d3fff46bd06d8638abf06e1716fc4a1dc6c2a6 Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Thu, 24 Jun 2021 15:09:19 +0200 Subject: problem 112 in julia --- julia/112-bouncy_numbers.jl | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 julia/112-bouncy_numbers.jl diff --git a/julia/112-bouncy_numbers.jl b/julia/112-bouncy_numbers.jl new file mode 100644 index 0000000..4877ed9 --- /dev/null +++ b/julia/112-bouncy_numbers.jl @@ -0,0 +1,39 @@ +### +# Bouncy numbers +# Problem 112 +# +# 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%. +### + + +using Base.Iterators + +function is_bouncy(n) + s = collect(string(n)) + !(issorted(s) || issorted(s, rev=true)) +end + +const RATIO = 0.99 + +bouncy_count = 0 +for n in countfrom(0) + global bouncy_count + if is_bouncy(n) + bouncy_count += 1 + end + if bouncy_count / n >= RATIO + println(n) + exit(0) + end +end -- cgit