CheckIO: Min and Max

import functools

def abstract(*args, **kwargs):
    compare = kwargs.get('compare', lambda x,y: x > y)
    key = kwargs.get('key', lambda x: x)
    values = iter(args[0]) if len(args) == 1 else iter(args)
    result = next(values)
    for i in values:
        if compare(key(i), key(result)):
            result = i
    return result

max = functools.partial(abstract, compare=lambda x,y: x > y)
min = functools.partial(abstract, compare=lambda x,y: x < y)

if __name__ == '__main__':
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert max(3, 2) == 3, "Simple case max"
    assert min(3, 2) == 2, "Simple case min"
    assert max([1, 2, 0, 3, 4]) == 4, "From a list"
    assert min("hello") == "e", "From string"
    assert max(2.2, 5.6, 5.9, key=int) == 5.6, "Two maximal items"
    assert min([[1, 2], [3, 4], [9, 0]], key=lambda x: x[1]) == [9, 0], "lambda key"

https://www.checkio.org/mission/min-max/

Leave a Reply

Your email address will not be published. Required fields are marked *