blob: ab136ca725a60ce8eca61d44cfd73e3037a35d98 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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)
ds = digits(n)
!(issorted(ds) || issorted(ds, 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
|