Today, I've been trying to get used to Pythons functional programming tools by solving Project-Euler tasks. To make them more interesting, I've solved them in one line. But I realized, that it is difficult to read online as only about 70 characters get displayed without a scrollbar. So I made multi-line solutions out of them.

These snippets are also good examples what's possible to do with Python and to show that Python is fast.

## Problem 24

What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?

```
from itertools import permutations, islice
print(next(islice(permutations("0123456789"), 999999, 999999 + 1)))
```

## Problem 29

How many distinct terms are in the sequence generated by $a^b$ for $2 \leq a \leq 100$ and $2 \leq b \leq 100$?

```
d = lambda top: len(set([a ** b for a in range(2, top + 1) for b in range(2, top + 1)]))
```

## Problem 34

145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145. Find the sum of all numbers which are equal to the sum of the factorial of their digits. Note: as 1! = 1 and 2! = 2 are not sums they are not included.

```
from math import factorial
l = lambda n: reduce(lambda x, y: int(x) + factorial(int(y)), [d for d in "0" + str(n)])
print(reduce(lambda x, y: x + y, filter(lambda x: x == l(x), range(3, 100000))))
```

## Problem 36

The decimal number, 585 = 10010010012 (binary), is palindromic in both bases. Find the sum of all numbers, less than one million, which are palindromic in base 10 and base 2.

```
palindrom = (
lambda x: str(x) == str(x)[::-1] and str(bin(x))[2:] == str(bin(x))[2:][::-1]
)
d = lambda top: reduce(lambda x, y: x + y, filter(palindrom, range(0, top + 1)))
```

## Problem 48

The series, $1^1 + 2^2 + 3^3 + ... + 10^{10} = 10405071317$. Find the last ten digits of the series, $1^1 + 2^2 + 3^3 + ... + 1000^{1000}$.

```
d = lambda top: str(reduce(lambda x, y: x + y, [i ** i for i in range(1, top + 1)]))[
-10:
]
```

## Problem 52

Find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x, contain the same digits in some order.

```
digits = lambda n, p: set(str(n * p))
d = lambda n: all(digits(n, 1) == digits(n, x) for x in range(2, 7))
print(filter(d, range(0, 1000000)))
```

## Problem 53

How many values of $\binom{n}{r}$, for $1 \leq r \leq n \leq 100$, exceed one-million?

```
from math import factorial as f
print(
sum(
(f(i) / (f(j) * f(i - j))) > 1000000 for i in range(1, 101) for j in range(1, i)
)
)
```

## Problem 56

Considering natural numbers of the form, $a^b$, finding the maximum digital sum.

```
print(
max(
[
sum([int(c) for c in str(a ** b)])
for a in range(1, 100)
for b in range(1, 100)
]
)
)
```

## Problem 97

Find the last ten digits of the non-Mersenne prime: $28433 \cdot 2^{7830457} + 1$.

```
print(28433 * (2 ** 7830457) + 1) % (10 ** 10)
```