Com o recente ataque do Python , aqui está uma tentativa de mostrar os pontos fortes do Python. Seu desafio é escrever um programa que calcule o fatorial do número mais alto possível em 10 segundos.n
Sua pontuação será (highest n for your program on your machine)/(highest n for my program on your machine)
Regras
- Você deve calcular uma solução inteira exata. Como o fatorial seria muito maior do que o que pode caber em um número inteiro não assinado de 64 bits, você pode usar cadeias de caracteres se o seu idioma não suportar números inteiros grandes
- As brechas padrão são proibidas. Particularmente, você não pode usar nenhum recurso externo.
- Somente a parte do cálculo (isso inclui tempo para quaisquer soluções alternativas usando seqüências de caracteres) aumenta o tempo total, que deve ser inferior a 10 segundos, em média.
- Apenas programas de thread único.
- Você deve armazenar a saída em um formato facilmente imprimível (já que a impressão leva tempo) (veja meu programa abaixo), sequência, variável, matriz de caracteres etc.
EDITAR:
- Seu programa deve fornecer a saída correta para todos
n
:1 <= n <= (your highest n)
EDIT2:
- Detesto dizer isso explicitamente, mas o uso das funções fatoriais internas do seu idioma se enquadra nas brechas padrão http://meta.codegolf.stackexchange.com/a/1078/8766 Desculpe Mathematica e Sage
Meu 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" )
Maior pontuação ganha. Para o registro, meu código pode gerenciar n = 90000
em cerca de 9.89
segundos em um Pentium 4 3.0 GHz
EDIT: todos podem adicionar a pontuação, em vez de apenas o n mais alto . Apenas o mais alto n
não tem significado por si só, pois depende do seu hardware. É impossível ter um critério de vitória objetivo de outra forma. A resposta de ali0sha faz isso corretamente.
Nós temos um vencedor. Não aceitei a resposta java https://codegolf.stackexchange.com/a/26974/8766 , pois meio que saia perto de http://meta.codegolf.stackexchange.com/a/1080/8766
factorial(Inf)
:, retorna Inf
em uma fração de segundo.
operator.mul
em vez da função lambda