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...

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

Progetto Eulero Problema 2

Project Euler

Eccoci di nuovo insieme per affrontare il problema n° 2 di Project Euler. Andiamo ad esaminare il problema...






Progetto Eulero Problema 2
"Ogni nuovo termine della sequenza di Fibonacci è generato sommando i due termini precedenti. Iniziando con 1 e 2, i primi 10 termini saranno:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
Trova la somma di tutti i termini di valore pari che non superano i quattro milioni."

Per risolvere questo problema dobbiamo prima di tutto avere chiaro cosa sia la successione di Fibonacci.
Prendiamo la sequenza del problema:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89

Partendo da 1 e 2 possiamo creare ogni nuovo numero della sequenza semplicemente sommando i due numeri precedenti in questo modo:


1+2 = 3

1,2,3

2+3 = 5
1,2,3,5

3+5 = 8

1,2,3,5,8 
...


Detto questo possiamo semplicemente dire che A + B = C
Ecco un esempio di codice che stampa la sequenza di Fibonacci:

a = 1
b = 2
c = a + b

while a <= 10:  
    print a,
    a = c - a
    b = c
    c = a + b

L'output del codice sarà quindi 1,2,3,5,8 in quanto abbiamo deciso per ora di creare solo numeri minori di 10 (while a <= 10).
Il problema però ci chiede di trovare "la somma di tutti i termini di valore pari che non superano i quattro milioni", quindi dobbiamo aggiungere un metodo che ci permetta di filtrare solo i numeri pari e sommarli.
Modifichiamo il codice...


a = 1
b = 2
c = a + b
somma = 0                        #Somma dei numeri pari trovati

while a <= 4000000:
    if a%2 == 0:                  #Se a è pari aggiunge a alla somma
        somma += a
    a = c - a
    b = c
    c = a + b

print somma                      #Stampa la somma dei numeri pari nella sequenza

Certamente non è il codice piu efficente e veloce ma trova comunque la soluzione al problema. Adesso tocca a voi trovare la vostra soluzione!
Ci vediamo per il problema n° 3 !

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