З недавнім ударом Python , ось спроба показати сильні сторони Python. Ваше завдання полягає в тому, щоб написати програму, яка обчислює максимальну кількість фактів протягом 10 секунд.n
Ваш рахунок буде (highest n for your program on your machine)/(highest n for my program on your machine)
Правила
- Ви повинні обчислити точне ціле рішення. Оскільки факториал буде набагато вищим, ніж те, що може вміститися в 64-бітове цілочисене без знаку, ви можете використовувати рядки, якщо ваша мова не підтримує великі цілі числа
- Стандартні лазівки заборонені. Зокрема, ви не можете використовувати будь-які зовнішні ресурси.
- Тільки обчислювальна частина (сюди входить час для будь-яких обхідних шляхів з використанням рядків) додає до загального часу, який в середньому повинен становити менше 10 секунд.
- Тільки однопотокові програми.
- Ви повинні зберігати вихід у легко друкованій формі (оскільки друк вимагає часу) (див. Мою програму нижче), рядкові, змінні, масив символів тощо.
Редагувати:
- Ваша програма повинна дати правильний вихід для всіх
n
:1 <= n <= (your highest n)
EDIT2:
- Я ненавиджу це чітко, але використання вбудованих функціональних функцій вашої мови підпадає під стандартні лазівки http://meta.codegolf.stackexchange.com/a/1078/8766 Вибачте, Mathematica та Sage
Моя програма
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" )
Найвищий результат виграє. Для запису мій код може управляти n = 90000
приблизно за 9.89
секунди на Pentium 4 3,0 ГГц
EDIT: Можеш все , будь ласка , додати рахунок , а не тільки найвищий п . Просто найвища n
сама по собі ніякого значення не має, оскільки це залежить від обладнання. Інакше неможливо мати об'єктивний критерій виграшу. anwer авеша робить це правильно.
У нас є переможець. Я не прийняв відповідь на Java /codegolf//a/26974/8766, оскільки це спідниці, близькі до http://meta.codegolf.stackexchange.com/a/1080/8766
factorial(Inf)
повертається Inf
за частку секунди.
operator.mul
замість функції лямбда