최근 Python bashing 과 함께 Python의 장점을 보여 주려는 시도가 있습니다. 당신의 도전은 n
10 초 안에 가능한 한 많은 수의 계승을 계산하는 프로그램을 작성하는 것 입니다.
당신의 점수는 (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 죄송 티카와 세이지
내 프로그램
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" )
가장 높은 점수가 이깁니다. 기록을 위해 내 코드는 Pentium 4 3.0 GHz n = 90000
에서 약 9.89
몇 초 만에 관리 할 수 있습니다
편집 : 모든 사람 이 가장 높은 n 대신 점수 를 추가 할 수 있습니까 ? 하드웨어에 따라 최고 값 만으로는 의미가 없습니다. 그렇지 않으면 객관적인 승리 기준을 갖는 것은 불가능합니다. ali0sha의 anwer 가 올바르게 수행합니다.n
우리는 승자가 있습니다. http://meta.codegolf.stackexchange.com/a/1080/8766에 가까운 치마의 종류이므로 Java 답변 /codegolf//a/26974/8766 을 수락하지 않았습니다 .
factorial(Inf)
, 반환 Inf
순식간에 이루어집니다.
operator.mul
람다 함수 대신 사용할 수 있습니다