# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# 1 - Defina a função soma_nat que recebe como argumento um número natural n
# e devolve a soma de todos os números naturais até n.
# - Ex: soma_nat(5) = 15

soma_nat = lambda n : 1 if n == 1 else n + soma_nat(n-1)
print(soma_nat(2))

# 2 - Defina a função div que recebe como argumentos dois números naturais m
# e n e devolve o resultado da divisão inteira de m por n. Neste exercício você não
# pode recorrer às operações aritméticas de multiplicação, divisão e resto da divisão
# inteira.
# - Ex: div(7,2) = 3

div = lambda m, n: 0 if m < n else 1 + div(m-n, n)
print(div(7,2))

# 3 - Defina a função prim_alg que recebe como argumento um número natural e devolve o primeiro algarismo (o mais significativo) na representação decimal de n.
# - Ex: prim_alg(5649) = 5
# - Ex: prim_alg(7) = 7

prim_alg = lambda n: str(n)[0]
print(prim_alg(5649))
print(prim_alg(7))

# 4 - Defina a função prod_lista que recebe como argumento uma lista de inteiros e
# devolve o produto dos seus elementos.
# - Ex: prod_lista([1,2,3,4,5,6]) = 720

from functools import reduce
prod_lista = lambda inteiros: reduce((lambda x, y: x * y), inteiros)
prod_lista([1,2,3,4,5,6])

# 5 - Defina a função contem_parQ que recebe como argumento uma lista de números
# inteiros w e devolve True se w contém um número par e False em caso contrário.
# - Ex: contem_parQ([2,3,1,2,3,4]) = True
# - Ex: contem_parQ([1,3,5,7]) = False

contem_parQ = lambda w: True if list(filter(lambda x: x%2 == 0, w)) else False
print(contem_parQ([2,3,1,2,3,4]))
print(contem_parQ([1,3,5,7]))

# 6 - Defina a função todos_imparesQ que recebe como argumento uma lista de
# números inteiros w e devolve True se w contém apenas números ímpares e False
# em caso contrário.
# - Ex: todos_imparesQ([1,3,5,7]) = True
# - Ex: todos_imparesQ([]) = True
# - Ex: todos_imparesQ([1,2,3,4,5]) = False

todos_imparesQ = lambda w: True if list(filter(lambda x: x%2 != 0, w)) == w else False
print(todos_imparesQ([1,3,5,7]))
print(todos_imparesQ([]))
print(todos_imparesQ([1,2,3,4,5]))

# 7 - Defina a função pertenceQ que recebe como argumentos uma lista de números
# inteiros w e um número inteiro n e devolve True se n ocorre em w e False em
# caso contrário.
# - Ex: pertenceQ([1,2,3],1) = True
# - Ex: pertenceQ([1,2,3],2) = True
# - Ex: pertenceQ([1,2,3],3) = True
# - Ex: pertenceQ([1,2,3],4) = False

pertenceQ = lambda w, n: True if n in w else False
print(pertenceQ([1,2,3],1))
print(pertenceQ([1,2,3],2))
print(pertenceQ([1,2,3],3))
print(pertenceQ([1,2,3],4))

# 8 - Defina a função junta que recebe como argumentos duas listas de números
# inteiros w1 e w2 e devolve a concatenação de w1 com w2 .
# - Ex: junta([1,2,3],[4,5,6]) = [1, 2, 3, 4, 5, 6]
# - Ex: junta([],[4,5,6]) = [4, 5, 6]
# - Ex: junta([1,2,3],[]) = [1, 2, 3]

junta = lambda w1, w2: w1 + w2
print(junta([1,2,3],[4,5,6]))
print(junta([],[4,5,6]))
print(junta([1,2,3],[]) )

# 9 - Defina a função temPrimoQ que recebe como argumento uma lista de listas de
# números inteiros w e devolve True se alguma das sublistas w tem um número
# primo e False em caso contrário.
# - Ex: temPrimoQ([[4,4,4,4],[5,4,6,7],[2,4,3]]) = True
# - Ex: temPrimoQ([[4,4,4,4],[4,4,4],[],[4]]) = False

# +
retorna_primo = lambda x: True if not list(filter(lambda z: x % z == 0, range(2, x))) else False
retorna_primo_lista = lambda lista: list(filter(lambda x: retorna_primo(x), lista))
temPrimoQ = lambda listas: True if list(filter(lambda lista: retorna_primo_lista(lista), listas)) else False

print(temPrimoQ([[4,4,4,4],[5,4,6,7],[2,4,3]]))
print(temPrimoQ([[4,4,4,4],[4,4,4],[],[4]]))
# -

# 10 - Defina a função inverteLista que recebe como argumento uma lista w e devolve a
# mesma lista mas invertida.
# - Ex: inverteLista([1,2,3,4,5]) = [5, 4, 3, 2, 1]
# - Ex: inverteLista([])

# +
inverteLista = lambda w: w[::-1]

print((inverteLista([1,2,3,4,5])))
print(inverteLista([]))

StarcoderdataJupyterScriptsDedupFiltered