about summary refs log tree commit diff
path: root/daily/287easy/README.md
blob: 2ef0423badc1ed62cdf5a514d1e98c63e92474fc (plain) (blame)
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)!*