Sorted? Yes? No? How? ..In Python


The challenge

Complete the method which accepts an array of integers, and returns one of the following:

  • "yes, ascending" – if the numbers in the array are sorted in an ascending order
  • "yes, descending" – if the numbers in the array are sorted in a descending order
  • "no" – otherwise

You can assume the array will always be valid, and there will always be one correct answer.

Complete the method which accepts an array of integers, and returns one of the following:

  • "yes, ascending" – if the numbers in the array are sorted in an ascending order
  • "yes, descending" – if the numbers in the array are sorted in a descending order
  • "no" – otherwise

You can assume the array will always be valid, and there will always be one correct answer.

The solution in Python code

Option 1:

def is_sorted_and_how(arr):
    asc = sorted(arr)
    desc = sorted(arr, reverse=True)
    if arr==asc:
        return "yes, ascending"
    elif arr==desc:
        return "yes, descending"
    else:
        return "no"

Option 2:

def is_descending(arr):
    for i in range(len(arr) - 1):
        if arr[i + 1] > arr[i]: return False
    return True

def is_ascending(arr):
    for i in range(len(arr) - 1):
        if arr[i + 1] < arr[i]: return False
    return True
   
def is_sorted_and_how(arr):
    if is_ascending(arr): return 'yes, ascending'
    if is_descending(arr): return 'yes, descending'
    return 'no'

Option 3:

is_sorted_and_how = lambda a: ['no','yes, ascending','yes, descending'][(sorted(a)==a)+(sorted(a)[::-1]==a)*2]

Test cases to validate our solution

test.it("[1, 2]")
test.assert_equals(is_sorted_and_how([1, 2]), 'yes, ascending')

test.it("[15, 7, 3, -8]")
test.assert_equals(is_sorted_and_how([15, 7, 3, -8]), 'yes, descending')

test.it("[4, 2, 30]")
test.assert_equals(is_sorted_and_how([4, 2, 30]), 'no')