Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Min and Max by jbaughman42
from operator import gt, lt
def min(*args, **kwargs):
return cmp(lt, *args, **kwargs)
def max(*args, **kwargs):
return cmp(gt, *args, **kwargs)
def cmp(op, *args, **kwargs):
key = kwargs.get("key", None)
# If we have one positional argument, it's an iterable; otherwise
# it's two or more positional arguments.
data = args if len(args) > 1 else list(args[0])
best = data[0]
for item in data[1:]:
# Without a key we compare the item and the current best value;
# otherwise we compare the result of the key applied to both values
compare = item, best
if key:
compare = key(item), key(best)
best = item if op(*compare) else best
return best
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"
print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
Oct. 3, 2017