Con il recente bashing di Python , ecco un tentativo di mostrare i punti di forza di Python. La tua sfida è scrivere un programma che calcoli il fattoriale di un numero il più alto possibile entro 10 secondi.n
Il tuo punteggio sarà (highest n for your program on your machine)/(highest n for my program on your machine)
Regole
- È necessario calcolare una soluzione intera esatta. Poiché il fattoriale sarebbe molto più alto di quello che può stare in un intero senza segno a 64 bit, puoi usare le stringhe se la tua lingua non supporta numeri interi grandi
- Sono vietate le scappatoie standard. In particolare, non è possibile utilizzare risorse esterne.
- Solo la parte di calcolo (include il tempo per eventuali soluzioni alternative che utilizzano stringhe) si aggiunge al tempo totale che dovrebbe essere in media inferiore a 10 secondi.
- Solo programmi a thread singolo.
- È necessario memorizzare l'output in una forma facilmente stampabile (poiché la stampa richiede tempo) (vedere il mio programma di seguito), stringa, variabile, matrice di caratteri, ecc.
MODIFICARE:
- Il tuo programma deve fornire l'output corretto per tutti
n
:1 <= n <= (your highest n)
EDIT2:
- Odio dirlo esplicitamente, ma l'uso delle funzioni fattoriali integrate nella tua lingua rientra nelle scappatoie standard http://meta.codegolf.stackexchange.com/a/1078/8766 Siamo spiacenti Mathematica e Sage
Il mio programma
from __future__ import print_function
import time
def factorial( n ):
return reduce( ( lambda x , y : x * y ) , xrange( 1 , n + 1 ) , 1 )
start = time.clock()
answer = factorial( 90000 )
end = time.clock()
print ( answer )
print ( "Time:" , end - start , "sec" )
Il punteggio più alto vince. Per la cronaca, il mio codice può gestire n = 90000
in circa 9.89
secondi su un Pentium 4 3.0 GHz
EDIT: tutti possono aggiungere il punteggio piuttosto che solo il più alto n . Solo il più alto n
non ha alcun significato da solo in quanto dipende dal tuo hardware. Altrimenti è impossibile avere un criterio vincente oggettivo. ali0sha's anwer lo fa correttamente.
Abbiamo un vincitore. Non ho accettato la risposta java /codegolf//a/26974/8766 in quanto si tratta di gonne vicine a http://meta.codegolf.stackexchange.com/a/1080/8766
factorial(Inf)
ritorna Inf
in una frazione di secondo.
operator.mul
invece la funzione lambda