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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# [[2016-10-10] Challenge #287 [Easy] Kaprekar's Routine](https://www.reddit.com/r/dailyprogrammer/comments/56tbds/20161010_challenge_287_easy_kaprekars_routine/)
## Description
Write a function that, given a 4-digit number, returns the largest digit in
that number. Numbers between 0 and 999 are counted as 4-digit numbers with
leading 0's.
largest_digit(1234) -> 4
largest_digit(3253) -> 5
largest_digit(9800) -> 9
largest_digit(3333) -> 3
largest_digit(120) -> 2
In the last example, given an input of `120`, we treat it as the 4-digit number
`0120`.
*Today's challenge is really more of a warmup for the bonuses. If you were able
to complete it, I highly recommend giving the bonuses a shot!*
## Bonus 1
Write a function that, given a 4-digit number, performs the "descending digits"
operation. This operation returns a number with the same 4 digits sorted in
descending order.
desc_digits(1234) -> 4321
desc_digits(3253) -> 5332
desc_digits(9800) -> 9800
desc_digits(3333) -> 3333
desc_digits(120) -> 2100
## Bonus 2
Write a function that counts the number of iterations in Kaprekar's Routine,
which is as follows.
Given a 4-digit number *that has at least two different digits*, take that
number's descending digits, and subtract that number's ascending digits. For
example, given `6589`, you should take `9865 - 5689`, which is `4176`. Repeat
this process with `4176` and you'll get `7641 - 1467`, which is `6174`.
Once you get to 6174 you'll stay there if you repeat the process. In this case
we applied the process 2 times before reaching 6174, so our output for `6589`
is `2`.
kaprekar(6589) -> 2
kaprekar(5455) -> 5
kaprekar(6174) -> 0
Numbers like 3333 would immediately go to 0 under this routine, but since we
require at least two different digits in the input, all numbers will eventually
reach 6174, which is known as Kaprekar's Constant. Watch
[this video](https://www.youtube.com/watch?v=d8TRcZklX_Q) if you're still
unclear on how Kaprekar's Routine works.
What is the largest number of iterations for Kaprekar's Routine to reach 6174?
That is, what's the largest possible output for your `kaprekar` function, given
a valid input? Post the answer along with your solution.
*Thanks to [/u/BinaryLinux](https://www.reddit.com/u/BinaryLinux) and
[/u/Racoonie](https://www.reddit.com/u/Racoonie) for posting the idea behind
this challenge in
[/r/daliyprogrammer_ideas](https://www.reddit.com/r/daliyprogrammer_ideas)!*
|