Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- 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%.
- '''
- # FUNCTION 1
- def isIncreasing(n):
- s = str(n)
- counter = 0
- length = len(s)
- for i in range(length-1):
- if int(s[i]) <= int(s[i+1]):
- counter += 1
- if counter == length-1:
- return True
- else:
- return False
- # FUNCTION 2
- def isDecreasing(n):
- s = str(n)
- counter = 0
- length = len(s)
- for i in range(length - 1):
- if int(s[i]) >= int(s[i + 1]):
- counter += 1
- if counter == length - 1:
- return True
- else:
- return False
- # FUNCTION 3
- def isBouncy(n):
- if isDecreasing(n) == False and isIncreasing(n) == False:
- return True
- return False
- # FUNCTION 4
- def bouncyProportion(proportion):
- n = 1
- counter = 0
- counter += isBouncy(1)
- prop = counter / n
- while prop != proportion:
- n += 1
- counter += isBouncy(n)
- prop = counter / n
- return n
- # MAIN FUNCTION
- print(bouncyProportion(0.5))
- print(bouncyProportion(0.9))
- print(bouncyProportion(0.99))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement