Mit dem jüngsten Python- Bashing wird hier versucht, die Stärken von Python zu demonstrieren. Ihre Herausforderung besteht darin, ein Programm zu schreiben, das n
innerhalb von 10 Sekunden die Fakultät einer möglichst hohen Zahl berechnet .
Ihre Punktzahl wird sein (highest n for your program on your machine)/(highest n for my program on your machine)
Regeln
- Sie müssen eine genaue ganzzahlige Lösung berechnen. Da die Fakultät viel höher ist als diejenige, die in eine 64-Bit-Ganzzahl ohne Vorzeichen passen kann, können Sie Zeichenfolgen verwenden, wenn Ihre Sprache keine großen Ganzzahlen unterstützt
- Standardlücken sind verboten. Insbesondere können Sie keine externen Ressourcen verwenden.
- Nur der Berechnungsteil (dies schließt die Zeit für Umgehungen mit Zeichenfolgen ein) addiert sich zur Gesamtzeit, die im Durchschnitt unter 10 Sekunden liegen sollte.
- Nur Programme mit einem Thread.
- Sie müssen die Ausgabe in einer einfach zu druckenden Form speichern (da das Drucken einige Zeit in Anspruch nimmt) (siehe mein Programm weiter unten), in einer Zeichenfolge, einer Variablen, einem Zeichenarray usw.
BEARBEITEN:
- Ihr Programm muss für alle die richtige Ausgabe liefern
n
:1 <= n <= (your highest n)
EDIT2:
- Ich hasse es, dies ausdrücklich zu sagen, aber die Verwendung der eingebauten Fakultätsfunktionen Ihrer Sprache fällt unter die Standardlücken http://meta.codegolf.stackexchange.com/a/1078/8766 Sorry Mathematica and Sage
Mein Programm
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" )
Höchste Punktzahl gewinnt. Für die Aufzeichnung kann mein Code n = 90000
in ungefähr 9.89
Sekunden auf einem Pentium 4 3.0 GHz verwalten
EDIT: Kann jeder bitte die Punktzahl und nicht nur die höchste n hinzufügen . Nur das Höchste n
hat für sich genommen keine Bedeutung, da es von Ihrer Hardware abhängt. Andernfalls ist es unmöglich, ein objektives Gewinnkriterium zu haben. ali0shas Antwort macht das richtig.
Wir haben einen Sieger. Ich habe die Java-Antwort /codegolf//a/26974/8766 nicht akzeptiert, da sie sich in der Nähe von http://meta.codegolf.stackexchange.com/a/1080/8766 befindet
factorial(Inf)
liefert Inf
in Sekundenbruchteilen.
operator.mul
anstelle der Lambda-Funktion