######################
# Prova P1 2019-2 Hugo
######################

# Questão 1
def segredo(T, V, C):
    pass


def fórmula_processo_secreto(V, T, C=2.43):
    """
    Calcula a fórmula do processo secreto do enunciado, dados:
    V, float, o volume do líquido em m3
    T, float, a temperatura do líquido em K
    C, float, a constante correspondente ao líquido
    O retorno é um float
    """
    return (2 * V + (T**3) / 3) ** C + segredo(T, V, C)


# Questão 2
def a(b):
    """
    Recebe uma string b, onde # é considerado separador.
    Se a quantidade de partes é par, retorna uma string contendo as partes
    de trás pra frente, pulando de 2 em 2, separadas por vírgula.
    Caso seja ímpar, a última parte deve ser um número indicando a posição de
    uma das outras partes; nesse caso, retorna-se a string original com a parte
    indicada convertida para maiúsculas.
    """
    c = str.split(b, "#")
    d = len(c)
    if d % 2 == 0:
        return str.join(",", c[::-2])
    e = int(c[-1])
    if e < d - 1:
        c[e] = str.upper(c[e])
        return str.join("#", c[:-1])
    return "Operação inválida!"


# Questão 3


def prevê_explosão(elementos, quantidades):
    """
    Recebe duas listas, `elementos` contendo nomes de elementos (strings)
    e `quantidades` com suas respectivas quantidades em gramas (floats),
    e retorna um Booleano indicando se há explosão por causa dos elementos
    X e Y
    """
    if "X" not in elementos or "Y" not in elementos:
        return False

    # a partir aqui sabemos que ambos X e Y estão presentes!

    índice_X = elementos.index("X")
    quantidade_X = quantidades[índice_X]

    índice_Y = elementos.index("Y")
    quantidade_Y = quantidades[índice_Y]

    return quantidade_X >= 50 and quantidade_Y >= 100

    # alternativa
    if quantidade_X >= 50 and quantidade_Y >= 100:
        return True
    else:
        return False


######################
# P1 2018-2 João
######################


# Questão 2
# n-ésimo termo de uma PG de raz~
def termoPG(a1, r, n):
    return a1 * r ** (n - 1)


def cincoTermosPG(a1, r):
    """
    Retorna uma tupla de 5 números: os 5 primeiros termos da PG
    de termo inicial a1 e razão r.
    a1 e r devem ser números
    """
    return (
        termoPG(a1, r, 1),
        termoPG(a1, r, 2),
        termoPG(a1, r, 3),
        termoPG(a1, r, 4),
        termoPG(a1, r, 5),
    )


# Questão 3
def iniciofim(palavra):
    if len(palavra) > 0:
        return palavra[0] == palavra[-1]
    else:
        return True


def mudaPalavra(pal, numero):
    if not (iniciofim(pal)):
        if numero < len(pal):
            quebra = pal[-1] + pal[0] + pal[1:-2] + pal[0] + pal[-1]
        else:
            quebra = pal[0] + pal[-1] + pal[1:-2] + pal[-1] + pal[0]
    else:
        quebra = numero * pal[::-1]
    return quebra


######################
# Lab 5, Questão 2
######################


def proteína_correspondente(RNA):
    """
    Bla ble bli (enunciado)
    """
    tabela = {
        "UUU": "Phe",
        "CUU": "Leu",
        "UUA": "Leu",
        "AAG": "Lisina",
        "UCU": "Ser",
        "UAU": "Tyr",
        "CAA": "Gln",
    }

    trincas = RNA[0:3], RNA[3:6], RNA[6:9]
    return tabela[trincas[0]], tabela[trincas[1]], tabela[trincas[2]]
