ด้วยการทุบตี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 GHz
แก้ไข: Can ทุกคนโปรดเพิ่มคะแนนมากกว่าแค่สูงสุดn คนที่สูงที่สุดn
ไม่มีความหมายด้วยตัวเองเพราะมันขึ้นอยู่กับฮาร์ดแวร์ เป็นไปไม่ได้ที่จะมีเกณฑ์การชนะอย่างอื่น แอนต์เออร์ของ ali0shaทำสิ่งนี้อย่างถูกต้อง
เรามีผู้ชนะ ฉันไม่ยอมรับคำตอบจาวา/codegolf//a/26974/8766เพราะมันเป็นกระโปรงใกล้กับhttp://meta.codegolf.stackexchange.com/a/1080/8766
factorial(Inf)
ผลตอบแทนInf
ในเสี้ยววินาที
operator.mul
แทนฟังก์ชัน lambda ได้