#==========================================================
# Solución a todos los ejercios de la sesión de repaso.
# 6 de mayo, 2015.
#==========================================================

#----------------------------------------------------------
# Determina si los parámetros corresponden
# a una tripleta pitagórica. Regresa True
# en caso afirmativo, o False en caso
# contrario.
def tripleta(a, b, c):
    valores = [a, b, c]
    valores.sort()
    a = valores[0]
    b = valores[1]
    c = valores[2]
    if (c ** 2 == a ** 2 + b ** 2):
        return True
    else:
        return False

#----------------------------------------------------------
def factorial(n):
    r = 1
    for x in range(1, n + 1):
        r *= x
    return r

#----------------------------------------------------------
def digitaliza(n):
    r = []
    while n > 0:
        residuo = n % 10
        cociente = n // 10
        r.append(residuo)
        n = cociente
    return r[::-1]

#----------------------------------------------------------
def digitaliza_version2(n):
    s = str(n)
    r = []
    for c in s:
        r.append(int(c))
    return r

#----------------------------------------------------------
# Sumatoria de los factoriales de cada
# dígito de n. Ejemplo:
# sdf(1230) = 1! + 2! + 3! + 0!
def sdf(n):
    a = digitaliza(n)
    r = 0
    for x in a:
        r += factorial(x)
    return r

#----------------------------------------------------------
# Toma dos números A y B, y genera un
# archivo de salida con los siguientes
# resultados:
#
# A + B
# A - B
# A * B
# A // B
# A % B
def opera(a, b, nombre_archivo):
    with open(nombre_archivo, 'w') as archivo:
        archivo.write(str(a + b) + '\n')
        archivo.write(str(a - b) + '\n')
        archivo.write(str(a * b) + '\n')
        archivo.write(str(a // b) + '\n')
        archivo.write(str(a % b) + '\n')

#----------------------------------------------------------
# Toma dos conjuntos y regresa su unión.
def union(a, b):
    r = a[:] # Copia el conjunto a
    for e in b:
        if e not in r:
            r.append(e)
    return r

#----------------------------------------------------------
# Toma dos conjuntos y regresa su intersección.
def interseccion(a, b):
    r = []
    for e in a:
        if e in b:
            r.append(e)
    return r

#----------------------------------------------------------
# Toma dos conjuntos y regresa su diferencia.
def diferencia(a, b):
    r = []
    for e in a:
        if e not in b:
            r.append(e)
    return r