facebookcup
Leyendo por ahí, me encuentro con que la copa pistón… a no, la Copa Hacker de Facebook 2013 ya está en puerta y me ha resultado de lo más interesante, sobre todo revisando el tipo de problemas que se han planteado en las emisiones anteriores, por ejemplo:

Escribir un programa que lea una lista de enteros (siempre menos de 100 en total), e imprimirlas de todas las maneras posibles en las que cada entero puede expresarse como la suma de dos cuadrados. Por ejemplo 25 es (02)+(52) or (42)+(32).


Y no se que sucede, pero luego luego pienso en Python, así que de la pura emoción teclas a la obra!

Lo primero en crear una función para encontrar susodichos números para un entero cualquiera y la llamaré sumaDeCuadrados()

#!/usr/bin/python
#-*- coding: utf-8 -*-

# Escribir un programa que lea una lista de enteros (siempre menos de 100 en
# total), e imprimirlas de todas las maneras posibles en las que cada entero
# puede expresarse como la suma de dos cuadrados.
#               Por ejemplo 25 es (0^2)+(5^2) or (4^2)+(3^2).

import math
import sys
from optparse import OptionParser

def sumaDeCuadrados(entero):
    parejas = []
    posibles = range(int(math.sqrt(entero)))
    
    for i in posibles:
        sera = math.sqrt(entero - i * i)
        if sera - int(sera) == 0.0:
            if set([i,int(sera)]) not in parejas:
                parejas.append(set([i,int(sera)]))
    return parejas

def main(argv):

    usage = "%prog num,num,num,..."
    add_help_option = False
    parser = OptionParser(usage=usage, add_help_option=add_help_option)
    parser.add_option("-h", "--help", action="help", help=u"muestra este mensaje de ayuda")
    (options, args) = parser.parse_args()

    if len(args) != 0:
        lstNum = args[0].split(",")

    print
    print """
        SUMA DE CUADRADOS                                                          
            """
    print '16-01-2013'
    print 'rictor@cuhrt.com'
    print

    # Sólo los 100 primeros
    if len(lstNum) > 100:
        lstNum = lstNum[:100]

    for i in lstNum:
        lstResp = sumaDeCuadrados(int(i))
        print "Para el número: ", i, "existen las siguiente combinaciones de cuadrados..."
        for item in lstResp:
            pareja = list(item)
            print pareja[0], pareja[1]

if __name__ == "__main__":
  main(sys.argv[1:])

Y pues ya está, bueno faltan algunos comentarios, pero funciona de verdad, de verdad y para muestra un pantallaso
sumadecuadrados

Entonces ya soy seleccionado? huuuuuuuu! Quiero mi playera jajajaja!

Salu2+