Son zamanlarda Python dayak ile Python'un güçlü yönlerini göstermeye çalışacağız. Zorluk faktörünüzü n
10 saniye içinde olabildiğince yüksek bir sayıyı hesaplayan bir program yazmaktır .
Puanınız (highest n for your program on your machine)/(highest n for my program on your machine)
kurallar
- Kesin bir tamsayı çözümü hesaplamanız gerekir. Faktöriyel, 64 bit işaretsiz bir tam sayıya sığabileceğinden çok daha yüksek olacağından, diliniz büyük tam sayıları desteklemiyorsa dizeleri kullanabilirsiniz
- Standart boşluklar yasaktır. Özellikle, harici kaynakları kullanamazsınız.
- Yalnızca hesaplama bölümü (dizeleri kullanan herhangi bir geçici çözüm için süre içerir), ortalama süreye ortalama 10 saniyenin altında olması gerekir.
- Yalnızca tek iş parçacıklı programlar.
- Çıktıyı kolayca yazdırılabilir bir biçimde (yazdırma zaman aldıkça) (aşağıdaki programıma bakın), dize, değişken, karakter dizisi vb.
DÜZENLE:
- Programınız herkes için doğru çıktıyı vermelidir
n
:1 <= n <= (your highest n)
EDIT2:
- Bunu açıkça söylemekten nefret ediyorum, ancak dilinizin yerleşik faktöriyel işlevlerini kullanmak standart boşluklar altında yer alıyor http://meta.codegolf.stackexchange.com/a/1078/8766 Üzgünüm Mathematica ve Sage
Benim program
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" )
En yüksek puan kazanır. Kayıt için, kodum Pentium 4 3.0 GHz'de n = 90000
yaklaşık 9.89
saniyeler içinde yönetebilir
DÜZENLEME: Herkes en yüksek n yerine skoru ekleyebilir mi lütfen ? Sadece en yüksek olanın donanımınıza bağlı olduğu için tek başına bir anlamı yoktur. Aksi takdirde objektif kazanma ölçütüne sahip olmak imkansızdır. ali0sha'nın anwerı bunu doğru yapıyor.n
Bir kazananımız var. Http://meta.codegolf.stackexchange.com/a/1080/8766 gibi bir tür etek gibi java cevabını /codegolf//a/26974/8766 kabul etmedim
factorial(Inf)
geri döner Inf
.
operator.mul
Lambda işlevi yerine kullanabilirsiniz