Inicio > Programing > Facebook Hacker Cup 2013 hace uso del teorema de Fermat

Facebook Hacker Cup 2013 hace uso del teorema de Fermat

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+

Categorías:Programing Etiquetas: , , , ,
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

PiKon

3D Printing + Raspberry Pi Camera = PiKon Telescope

gvSIG blog

gvSIG project blog

Python Adventures

Welcome to the Jungle!

A %d blogueros les gusta esto: