## Hackerrank - Best Divisor Solution

Kristen loves playing with and comparing numbers. She thinks that if she takes two different positive numbers, the one whose digits sum to a larger number is *better* than the other. If the sum of digits is equal for both numbers, then she thinks the smaller number is *better*. For example, Kristen thinks that is better than and that is better than .

Given an integer, , can you find the divisor of that Kristin will consider to be the best?

**Input Format**

A single integer denoting .

**Constraints**

**Output Format**

Print an integer denoting the best divisor of .

**Sample Input 0**

`12`

**Sample Output 0**

`6`

**Explanation 0**

The set of divisors of can be expressed as . The divisor whose digits sum to the largest number is (which, having only one digit, sums to itself). Thus, we print as our answer.

### Solution in Python

```
def divisors(n):
for i in range(1,n+1):
if not n%i:
yield i
def bestDivisor(n):
bestNum = 0
bestSum = 0
for i in divisors(n):
s = sum(map(int,str(i)))
if s == bestSum:
bestNum = min(bestNum,i)
elif s > bestSum:
bestNum = i
bestSum = s
return bestNum
n = int(input())
print(bestDivisor(n))
```

*Short version*

```
n = int(input())
print(max((d for d in range(1, n+1) if n%d == 0), key=lambda x: sum(map(int, str(x)))))
```