Supporta il tuo Forum su Patreon!
 
  > Register  
  > Calendar  
  > Member List  
 
  > Support your Forum  
  > Today's Posts  
   

Go Back   netgamers.it > Tech & Tech > Developer's Zone

Reply
 
Thread Tools Rate Thread
Old 27th May 2007, 09:17   #1
.Z.
fork()
 
.Z.'s Avatar
 
Join Date: Jan 2002
Location: Bologna
Posts: 13,783
Project Euler

Chi lo conosce?

http://projecteuler.net/

Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.

Ovvero: 156 problemi matematici da risolvere con qualsiasi linguaggio di programmazione.

Non lo credevo possibile, ma mi sto appassionando alla cosa

Per me è un ottimo sito, ripassare matematica () programmando, due piccioni con una fava. Per ogni problema risolto si guadagna l'accesso al forum per confrontare la propria soluzione con quella degli altri.

Un assaggio:

Problem 1

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.


Sembra banalissimo ma c'è un trabocchetto (in cui son cascato a pié pari )
__________________
Personally, I would never want to be a member of any group where you either have to wear a hat, or you can't wear a hat.
.Z. is offline   Reply With Quote
Old 27th May 2007, 10:37   #2
Darklord
lupetto supremo
 
Darklord's Avatar
 
Join Date: Mar 1999
Location: Bari
Posts: 12,829
bel sito
purtroppo io e la matematica abbiamo avuto sempre un rapporto travagliato (matematica discreta l'ho dovuta rifare 4 volte...analisi poi mi vergogno a dirlo ).
__________________
Python-foo Black Belt
NGI Forum
» Tech & Tech » Developer's Zone
Darklord is offline   Reply With Quote
Old 27th May 2007, 11:12   #3
gh3
|> play
 
gh3's Avatar
 
Join Date: Mar 2002
Location: Milan
Posts: 10,194
io li sto rimandando all'inverosimile... fai te...
gh3 is offline   Reply With Quote
Old 27th May 2007, 11:34   #4
Darklord
lupetto supremo
 
Darklord's Avatar
 
Join Date: Mar 1999
Location: Bari
Posts: 12,829
il mio goal attuale è risolvere il primo esercizio in python usando una sola riga di codice.
Vediamo se è fattibile...
__________________
Python-foo Black Belt
NGI Forum
» Tech & Tech » Developer's Zone
Darklord is offline   Reply With Quote
Old 27th May 2007, 11:50   #5
.Z.
fork()
 
.Z.'s Avatar
 
Join Date: Jan 2002
Location: Bologna
Posts: 13,783
È fattibile, ne pesco alcune dal thread. Non sbirciare

Spoiler:
sum([x for x in range(1000) if x % 3== 0 or x % 5== 0])

Spoiler:
reduce(lambda x,y: x+y, filter(lambda n: n%3==0 or n%5==0, range(1000)))

Ma la migliore è questa:
Spoiler:
sum(set(range(0,1000,3))|set(range(0,1000,5)))
__________________
Personally, I would never want to be a member of any group where you either have to wear a hat, or you can't wear a hat.

Last edited by .Z.; 27th May 2007 at 11:51.
.Z. is offline   Reply With Quote
Old 27th May 2007, 12:00   #6
.Z.
fork()
 
.Z.'s Avatar
 
Join Date: Jan 2002
Location: Bologna
Posts: 13,783
La mia in bash :makù:

Spoiler:
echo -e "$(seq 3 3 999)\n$(seq 5 5 999)" |
sort -nu |
awk '{sum = sum + $0} ; END { print "Answer: " sum }'


Devo disintossicarmi, fortuna tra un po' ci son le vacanze
__________________
Personally, I would never want to be a member of any group where you either have to wear a hat, or you can't wear a hat.
.Z. is offline   Reply With Quote
Old 27th May 2007, 12:14   #7
Darklord
lupetto supremo
 
Darklord's Avatar
 
Join Date: Mar 1999
Location: Bari
Posts: 12,829
ecco la mia...
non ho sbirciato e spero sia corretta...di modi per farlo con 1 sola riga me ne sono venuti in mente parecchi
Code:
>>> somma = lambda f:(reduce(lambda n,m:n+m, [x for x in range(1,f) if bool(not(x%3 and x%5))]))
>>> somma(10)
23
>>> somma(100)
2318
>>> somma(1000)
233168
__________________
Python-foo Black Belt
NGI Forum
» Tech & Tech » Developer's Zone
Darklord is offline   Reply With Quote
Old 27th May 2007, 12:16   #8
Darklord
lupetto supremo
 
Darklord's Avatar
 
Join Date: Mar 1999
Location: Bari
Posts: 12,829
Quote:
Originally Posted by .Z. View Post
Ma la migliore è questa:
Spoiler:
sum(set(range(0,1000,3))|set(range(0,1000,5)))
own3d

ma la mia è più nerd

edit: non avevo mai usato il terzo parametro della funza range()...che fico sto imparando cose nuove
__________________
Python-foo Black Belt
NGI Forum
» Tech & Tech » Developer's Zone
Darklord is offline   Reply With Quote
Old 27th May 2007, 17:41   #9
The Big
Armata Baccanale
 
The Big's Avatar
 
Join Date: Apr 2003
Location: /home/carlesso
Posts: 4,129
Ecco, mi son intrippato.
__________________
The Big: the e.gmail filler Xperience
OK, so you're a Ph.D. Just don't touch anything.
Il mio sito, e il mio blog
The Big is offline   Reply With Quote
Old 27th May 2007, 18:32   #10
.Z.
fork()
 
.Z.'s Avatar
 
Join Date: Jan 2002
Location: Bologna
Posts: 13,783
Quote:
Originally Posted by The Big View Post
Ecco, mi son intrippato.
Dillo a me, che mi son messo in testa di risolverli in bash script

Code:
#!/bin/bash

cat << END_DESCR
Problem 4

A palindromic number reads the same both ways. The largest palindrome made
from the product of two 2-digit numbers is 9009 = 91 × 99.

Find the largest palindrome made from the product of two 3-digit numbers.

END_DESCR

max=999
min=900
answer=

while [[ -z $answer ]] ; do
        answer=$(
                seq $max -1 $min |
                        awk '{ i = '$max' ; while (i > '$min') { print $0 * i ; i-- } }' |
                        grep '\(.\)\(.\)\(.\)\3\2\1' |
                        sort -nr |
                        head -n1
                )
        max=$min
        min=$(($min - 100))
done

echo Answer: $answer
Il più grosso palindromo dato dalla moltiplicazione di due numeri a tre cifre, con tanto di cicli furbetti
__________________
Personally, I would never want to be a member of any group where you either have to wear a hat, or you can't wear a hat.
.Z. is offline   Reply With Quote
Old 27th May 2007, 18:49   #11
Darklord
lupetto supremo
 
Darklord's Avatar
 
Join Date: Mar 1999
Location: Bari
Posts: 12,829
stasera mi vedo gli altri quesiti nerd
mannaggia questo euler mi farà trascurare Oblivion
__________________
Python-foo Black Belt
NGI Forum
» Tech & Tech » Developer's Zone
Darklord is offline   Reply With Quote
Old 27th May 2007, 19:51   #12
Darklord
lupetto supremo
 
Darklord's Avatar
 
Join Date: Mar 1999
Location: Bari
Posts: 12,829
il secondo è davvero isi...con python però non si può risolvere con una riga a meno di usare le list comprehensions unite alle funzioni lambda.
Facendo in questo modo calcolare i pari di fibonacci fino ad 1.000.000 è impossibile per il mio PC...ma c'è un altro sistema. I generatori

1000 volte più veloci...

Code:
# la funzia :P
>>> def evenFibo(n):
	a,b = 0,1
	while b<n:
		a,b = b,a+b
		if not b%2:
			yield b

#esecuzione :sisi:
>>> a=0
>>> for i in evenFibo(1000000): a+=i
>>> print a
Spoiler:
1089154
__________________
Python-foo Black Belt
NGI Forum
» Tech & Tech » Developer's Zone
Darklord is offline   Reply With Quote
Old 27th May 2007, 19:54   #13
z3ro
o comunque << 1
 
z3ro's Avatar
 
Join Date: May 2004
Location: tra -1 e 1 (VR)
Posts: 10,051
per fortuna non ci capisco nulla di matematica e non mi intrippo con queste cose
__________________
Inglesi, gente che andava nuda a caccia di marmotte quando noi già s'accoltellava un Giulio Cesare.

Quote:
Originally Posted by Mr. Baffetto View Post
z3ro è due basette con un sacco di ammore intorno.
z3ro is offline   Reply With Quote
Old 27th May 2007, 20:19   #14
.Z.
fork()
 
.Z.'s Avatar
 
Join Date: Jan 2002
Location: Bologna
Posts: 13,783
Quote:
Originally Posted by Darklord View Post
il secondo è davvero isi...con python però non si può risolvere con una riga a meno di usare le list comprehensions unite alle funzioni lambda.
Facendo in questo modo calcolare i pari di fibonacci fino ad 1.000.000 è impossibile per il mio PC...ma c'è un altro sistema. I generatori

1000 volte più veloci...

Code:
# la funzia :P
>>> def evenFibo(n):
	a,b = 0,1
	while b<n:
		a,b = b,a+b
		if not b%2:
			yield b

#esecuzione :sisi:
>>> a=0
>>> for i in evenFibo(1000000): a+=i
>>> print a
Spoiler:
1089154
Code:
#define     ONE_MILLION     1000000
#define     ISODD(x)        ((x) & 0x1)


static int
sumEvenTermsFib (const int max) {

        int sum = 0;
        int i, j, n;

        for (i = 0, j = 1, n = i + j;
             n < max;
             i = j, j = n, n = i + j) {
                if (!ISODD (n)) {
                        sum += n;
                }
        }

        return sum;
}


void
problem_2 (void) {
        printf ("Answer: %d\n", sumEvenTermsFib (ONE_MILLION));
}
senza %
__________________
Personally, I would never want to be a member of any group where you either have to wear a hat, or you can't wear a hat.
.Z. is offline   Reply With Quote
Old 27th May 2007, 20:30   #15
Darklord
lupetto supremo
 
Darklord's Avatar
 
Join Date: Mar 1999
Location: Bari
Posts: 12,829
Quote:
Originally Posted by .Z. View Post
Code:
#define     ONE_MILLION     1000000
#define     ISODD(x)        ((x) & 0x1)


static int
sumEvenTermsFib (const int max) {

        int sum = 0;
        int i, j, n;

        for (i = 0, j = 1, n = i + j;
             n < max;
             i = j, j = n, n = i + j) {
                if (!ISODD (n)) {
                        sum += n;
                }
        }

        return sum;
}


void
problem_2 (void) {
        printf ("Answer: %d\n", sumEvenTermsFib (ONE_MILLION));
}
senza %

se vabè ma il confronto lo fai lo stesso e quindi i dispari li calcoli come me
Sul forum ho visto la soluzione python di un americano che usava una formula matematica per evitare di calcolare i dispari ed è il 100% più efficiente del mio algoritmo
__________________
Python-foo Black Belt
NGI Forum
» Tech & Tech » Developer's Zone
Darklord is offline   Reply With Quote
Reply

Tags
euler, matematica

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 15:50.



Copyright 2017-2024 by netgamers.it