viernes, 6 de septiembre de 2013

Project Euler

El proyecto Euler es un sitio donde se pueden encontrar ejercicios matemáticos que se pueden resolver con algún lenguaje de programación. Hasta ahora hay 434 problemas planteados y divididos en niveles de 25 ejercicios cada uno.

El cuarto ejercicio pide hallar el mayor número palíndromo, es decir, que se puede leer igualmente de izquierda a derecha y de derecha a izquierda (como 90109) y que sea producto de la multiplicación de dos números de tres cifras.




Usando listas por comprensión y la función max en Python se puede resolver con una sola línea de código:

max([x*y for x in range(900,999) for y in range(900,999) if str(x*y)==str(x*y)[::-1]])

Salida: 906609

martes, 27 de agosto de 2013

El siguiente programa filtra los datos importantes en un documento xml y los imprime de forma organizada:

http://codepad.org/z9D2wFv0

arch = """<listitem>
    <variable name="UUID">2bd9c142-9e91-4182-b85c-5bb616823bd9</variable>
    <variable name="Name">kurokysan</variable>
    <variable name="AccStatus">1</variable>
    <variable name="WWWFilter">JARSP</variable>
    <variable name="UseTemplate">1</variable>
    <variable name="Rights">0</variable>
    <variable name="AdmFilter">JARSP</variable>
    <variable name="QuotaDayEnabled">0</variable>
    <variable name="QuotaDayType"></variable>
    <variable name="QuotaDay">5242880</variable>
    <variable name="QuotaWeekEnabled">0</variable>
    <variable name="QuotaWeekType"></variable>
    <variable name="QuotaWeek">0</variable>
    <variable name="QuotaMonthEnabled">0</variable>
    <variable name="QuotaMonthType"></variable>
    <variable name="QuotaMonth">0</variable>
    <variable name="QuotaAction"></variable>
    <variable name="QuotaSendAlert">0</variable>
    <variable name="Lang">detect</variable>
    <variable name="DontUseLangTemp">0</variable>
    <variable name="DetectedLang"></variable>
  </listitem>"""


indice = 0
indice2 = 0
while indice < len(arch):
    init = arch.find('"',indice)
    final = arch.find('"',init + 1)
    init2 = arch.find('">',indice2)
    final2 = arch.find('<',init2+1)
    if init == -1:
        break
    indice = final + 1
    indice2 = final + 1
    if len(arch[init2+2:final2]) == 0:
        print arch[init+1:final] + ' = ' + str(None)
    else:
        print arch[init+1:final] + ' = ' + str(arch[init2+2:final2])


Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
UUID = 2bd9c142-9e91-4182-b85c-5bb616823bd9
Name = kurokysan
AccStatus = 1
WWWFilter = JARSP
UseTemplate = 1
Rights = 0
AdmFilter = JARSP
QuotaDayEnabled = 0
QuotaDayType = None
QuotaDay = 5242880
QuotaWeekEnabled = 0
QuotaWeekType = None
QuotaWeek = 0
QuotaMonthEnabled = 0
QuotaMonthType = None
QuotaMonth = 0
QuotaAction = None
QuotaSendAlert = 0
Lang = detect
DontUseLangTemp = 0
DetectedLang = None

lunes, 19 de agosto de 2013

RECURSOS EN GOOGLE DEVELOPERS


En Google developers se puede encontrar tutoriales y videos para aprender Python. Hay una sección con ejercicios de práctica para revisar el tema dado.




Uno de los problemas propuestos es encontrar y organizar por orden alfabético los nombres más populares de niños nacidos en determinado año. Al lado de cada nombre debe aparecer el puesto en términos de popularidad. 




He aquí cómo resolví el ejercicio en Python. Aunque no se ve muy elegante sí muestra los resultados esperados.