domenica 27 febbraio 2011

Progetto Eulero Problema 4

Project Euler

Eccoci di nuovo quà, alle prese con il problema n° 4 di Project Euler!







Progetto Eulero Problema 4

"Un numero palindromo si  legge allo stesso modo in entrambe le direzioni. Il più grande palindromo formato dal prodotto di due numeri a 2 cifre è 9009 = 91 x 99.
Trova il più grande palindromo formato dal prodotto di due numeri a 3 cifre."

Questa volta dobbiamo "trovare il più grande palindromo formato dal prodotto di due numeri a 3 cifre".
Prendiamo quindi il piu grande numero a 3 cifre che è 999.
Per ogni n da 1 a 999 moltiplichiamo n per ogni m da 1 a 999,  ogni prodotto di n*m va quindi ribaltato e confrontato (esempio: 123 = 321?). Se il prodotto ribaltato è uguale all'originale, allora abbiano un numero palindromo da inserire in una lista, che alla fine verrà ordinata ed estratto il numero palindromo piu alto.
Vediamo ora la mia soluzione come sempre scritta in Python: 


def Trova_Palindromo(numero):
    lista_palindromi = []
    for n1 in range(1, numero+1):       
        for n2 in range(1, numero+1):
            prodotto = n1*n2
            stringa = str(prodotto)
            stringa_al_rovescio = stringa[::-1]
            if stringa == stringa_al_rovescio:
                if int(stringa) not in lista_palindromi:
                    lista_palindromi.append(int(stringa))                   
    lista_palindromi.sort()
    print lista_palindromi[-1]

Trova_Palindromo(99)


Come al solito la mia non è ne la soluzione migliore, ne quella piu veloce, è solo la "mia soluzione"!
Fatevi sotto e trovate la vostra!
...vi aspetto per il Problema n° 5...

------------------------------------------------------------------------------------------------------------------------

2 commenti:

  1. Molto velocemente:

    def euler4(n):
    return sorted([(x * y) for x in range(1, (n + 1)) for y in range(1, (n + 1)) if str(x * y) == str(x * y)[::-1]])[-1]

    Ciao,
    Marco.

    RispondiElimina
  2. O meglio:

    def euler4(n):
    return sorted([(x * y) for x in range(n) for y in range(n) if str(x * y) == str(x * y)[::-1]])[-1]

    RispondiElimina