aboutsummaryrefslogtreecommitdiff
path: root/challenge-237/steven-wilson/python/ch-02.py
blob: c7ff7edd008a6371d6bd687fe88b8c9148fbdccf (plain)
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
#!/usr/bin/env python3

from itertools import permutations


def calculate_greatness(elements, permutation):
    ''' Calculate greatness of array of integers and a permutation
    >>> calculate_greatness([1, 3, 5, 2, 1, 3, 1], [2, 5, 1, 3, 3, 1, 1])
    4
    >>> calculate_greatness([1, 2, 3, 4], [2, 3, 4, 1])
    3
    >>> calculate_greatness([1, 2], [1, 2])
    0
    '''
    count = 0
    for index, elem in enumerate(elements):
        if elem < permutation[index]:
            count += 1
    return count


def maximise_greatness(elements):
    ''' return maximum possible greatness from permutations of an array of integers
    >>> maximise_greatness([1, 3, 5, 2, 1, 3, 1])
    4
    >>> maximise_greatness([1, 2, 3, 4])
    3
    >>> maximise_greatness([1, 1, 1])
    0
    '''
    perms = set(permutations(elements))
    max_greatness = 0
    for permutation in perms:
        greatness = calculate_greatness(elements, permutation)
        if greatness > max_greatness:
            max_greatness = greatness
    return max_greatness


if __name__ == "__main__":
    import doctest

    doctest.testmod()