## cvičení 6
## seznamy

# ÚLOHA 1
# Napište funkce nad seznamem čísel, které zjistí:
#     součet všech čísel v seznamu,
#     nejvyšší číslo v seznamu,
#     zda se určitá hodnota vyskytuje v seznamu,
# tedy ekvivalenty operací max, sum a in (ale s použitím pouze základních operací nad seznamy).
def my_sum(numbers):
    pass


def my_max(numbers):
    pass


def my_in(item, numbers):
    pass

# vzorový výstup:
# >>> my_sum([6, 5, 11, 8])
# 30
# >>> my_max([6, 5, 11, 8])
# 11
# >>> my_max([-10, -3, -5])
# -3
# >>> my_in(5, [6, 5, 11, 8])
# True
# >>> my_in(4, [6, 5, 11, 8])
# False


# ÚLOHA 2
# Napište funkci, která vypočítá součin čísel v seznamu, ale ignoruje přitom případné nuly.
def nonzero_product(numbers):
    pass

# vzorový výstup:
# >>> nonzero_product([0, 2, 3, 0, 0, 3])
# 18
# >>> nonzero_product([0, 0, 0, 0])
# 1



# ÚLOHA 3
# Napište funkci my_sorted(numbers), který vrátí setřízený seznam prvků. Tato funkce nesmí měnit
# čísla ve vstupním seznamu.
def my_sorted(numbers):
    pass

# vzorový výstup:
# numbers = [3, 5, 6, 2, 1, 4]
# >>> my_sorted(numbers)
# [1, 2, 3, 4, 5, 6]
# print(numbers)
# [3, 5, 6, 2, 1, 4]


# ÚLOHA 4
# Napište funkci, která vrátí seznam <n> prvních členů fibonacciho posloupnosti.
def fib(n):
    pass

# vzorový výstup:
# >>> fib(3)
# [1, 1, 2]
# >>> fib(9)
# [1, 1, 2, 3, 5, 8, 13, 21, 34]


# ÚLOHA 5
# Napište funkci, která seznam zrotuje o zadaný počet míst <n>. Dělka seznamu
# se nezmění. Změna proběhne in place.
def rotate(array, n):
   pass


# vzorový výstup:
# array = [3, 5, 6, 2, 1, 4]
# >>> rotate(array, 1)
# >>> print(array)
# >>> [4, 3, 5, 6, 2, 1]
# >>> rotate(array, 2)
# >>> print(array)
# >>> [2, 1, 4, 3, 5, 6]


# ÚLOHA 6
# Funkce merge(list1, list2) spojí dva setříděné seznamy tak, aby výsledkem byl také setříděný seznam.
def merge(text):
    pass

# vzorový výstup:
# list1 = [1, 5, 6, 8, 9, 10]
# list2 = [2, 3, 4, 7]
# >>> result = merge(list1, list2)
# >>> print(result)
# >>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


if __name__ == "__main__":
    # zde můžete volat implementované funkce a zkusit si, jak fungují
    list1 = [1, 5, 6, 8, 9, 10]
    list2 = [2, 3, 4, 7]
    result = merge(list1, list2)
