Skip to content

Instantly share code, notes, and snippets.

@maxyko
Created September 20, 2017 16:04
Show Gist options
  • Save maxyko/8824824c43382392240443d4cfb5f2ef to your computer and use it in GitHub Desktop.
Save maxyko/8824824c43382392240443d4cfb5f2ef to your computer and use it in GitHub Desktop.
def min(*args, **kwargs):
key = kwargs.get("key", None)
if len(args) >= 2:
#print('Two or more')
_minimum = list(args)[0]
for _indx in range(1,len(args)):
if key:
expression = (key(args[_indx]) < key(_minimum))
else:
expression = args[_indx] < _minimum
if expression:
_minimum = args[_indx]
print(_minimum)
return _minimum
else:
#print('args:', args)
#print('list(args):', list(args[0]))
try:
minimum_ = list(args)[0][0]
###minimum_ = list(args[0])
except:
full_list = list(args[0])
#minimum_ = list(args[0])[0]
minimum_ = full_list[0]
args = [full_list,]
print('args:', args)
#print('minimum_:', minimum_)
for indx_ in range(1,len(args[0])):
if key:
expression = (key(args[0][indx_]) < key(minimum_))
else:
expression = args[0][indx_] < minimum_
if expression:
minimum_ = args[0][indx_]
print(minimum_)
return minimum_
def max(*args, **kwargs):
key = kwargs.get("key", None)
if len(args) >= 2:
_maximum = list(args)[0]
for indx in range(1,len(args)):
if key:
expression = (key(args[indx]) > key(_maximum))
else:
expression = args[indx] > _maximum
if expression:
_maximum = args[indx]
print(_maximum)
return _maximum
else:
try:
maximum_ = list(args)[0][0]
except:
full_list = list(args[0])
#minimum_ = list(args[0])[0]
maximum_ = full_list[0]
args = [full_list,]
for indx_ in range(1,len(args[0])):
if key:
expression = (key(args[0][indx_]) > key(maximum_))
else:
expression = args[0][indx_] > maximum_
if expression:
maximum_ = args[0][indx_]
print(maximum_)
return maximum_
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"
assert min(abs(i) for i in range(-10, 10)) == 0, 'Oops'
#print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment