Con el reciente ataque a Python , aquí hay un intento de mostrar las fortalezas de Python. Su desafío es escribir un programa que calcule el factorial de un número tan alto como sea posible en 10 segundos.n
Tu puntaje será (highest n for your program on your machine)/(highest n for my program on your machine)
Reglas
- Debe calcular una solución entera exacta. Dado que el factorial sería mucho más alto de lo que cabe en un entero sin signo de 64 bits, puede usar cadenas si su idioma no admite enteros grandes
- Las lagunas estándar están prohibidas. En particular, no puede utilizar ningún recurso externo.
- Solo la parte de cálculo (esto incluye el tiempo para cualquier solución alternativa que use cadenas) se suma al tiempo total que debe ser inferior a 10 segundos en promedio.
- Solo programas de subproceso único.
- Debe almacenar la salida en una forma fácilmente imprimible (ya que la impresión lleva tiempo) (vea mi programa a continuación), cadena, variable, matriz de caracteres, etc.
EDITAR:
- Su programa debe dar la salida correcta para todos
n
:1 <= n <= (your highest n)
EDIT2:
- Odio decir esto explícitamente, pero el uso de las funciones factoriales incorporadas en su idioma se encuentra dentro de las lagunas estándar http://meta.codegolf.stackexchange.com/a/1078/8766 Lo sentimos, Mathematica y Sage
Mi programa
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" )
La puntuación más alta gana. Para el registro, mi código puede administrar n = 90000
en unos 9.89
segundos en un Pentium 4 3.0 GHz
EDITAR: ¿Pueden todos agregar la puntuación en lugar de solo la n más alta ? Solo lo más alto n
no tiene sentido en sí mismo, ya que depende de su hardware. De lo contrario, es imposible tener un criterio ganador objetivo. La respuesta de ali0sha hace esto correctamente.
Tenemos un ganador. No acepté la respuesta de Java /codegolf//a/26974/8766, ya que se trata de faldas cercanas a http://meta.codegolf.stackexchange.com/a/1080/8766
factorial(Inf)
regresa Inf
en una fracción de segundo.
operator.mul
lugar de la función lambda