เกี่ยวกับซีรี่ส์
ก่อนอื่นคุณอาจปฏิบัติเช่นนี้กับการแข่งขันกอล์ฟอื่น ๆ และตอบคำถามโดยไม่ต้องกังวลเกี่ยวกับซีรี่ส์เลย อย่างไรก็ตามมีลีดเดอร์บอร์ดสำหรับทุกความท้าทาย คุณสามารถค้นหาลีดเดอร์พร้อมกับข้อมูลบางอย่างเพิ่มเติมเกี่ยวกับซีรีส์ในโพสต์แรก
แม้ว่าฉันจะมีไอเดียมากมายสำหรับชุด แต่ความท้าทายในอนาคตยังไม่เกิดขึ้น หากคุณมีข้อเสนอแนะใด ๆ โปรดแจ้งให้เราทราบเกี่ยวกับการโพสต์ Sandbox ที่เกี่ยวข้อง
Hole 3: Integer Partitions
ใช้เวลาในการเพิ่มความยากลำบากเล็กน้อย
พาร์ทิชันของจำนวนเต็มบวกn
ถูกกำหนดให้เป็น MultiSet n
ของจำนวนเต็มบวกซึ่งรวมไป ตัวอย่างเช่นถ้าn = 5
พาร์ติชันต่อไปนี้มีอยู่:
{1,1,1,1,1}
{2,1,1,1}
{2,2,1}
{3,1,1}
{3,2}
{4,1}
{5}
หมายเหตุว่าเหล่านี้เป็นมัลติจึงมีคำสั่งไม่ให้พวกเขา{3,1,1}
, {1,3,1}
และ{1,1,3}
ได้รับการพิจารณาทั้งหมดเหมือนกัน
งานของคุณจะได้รับการสร้างพาร์ทิชันแบบสุ่มของn
n
นี่คือกฎรายละเอียด:
การกระจายตัวของพาร์ทิชันที่ผลิตจะต้องมีเครื่องแบบ นั่นคือในตัวอย่างข้างต้นแต่ละพาร์ติชันควรส่งคืนด้วยความน่าจะเป็น 1/7
แน่นอนเนื่องจากข้อ จำกัด ทางเทคนิคของ PRNGs ความสม่ำเสมอที่สมบูรณ์แบบจะเป็นไปไม่ได้ เพื่อวัตถุประสงค์ในการประเมินความสม่ำเสมอของการส่งของคุณการดำเนินการต่อไปนี้จะถือว่าเป็นการให้การแจกแจงที่สมบูรณ์แบบ:
- การรับตัวเลขจาก PRNG (มากกว่าช่วงใด ๆ ) ซึ่งได้รับการบันทึกไว้ว่าเป็นชุด (โดยประมาณ)
- การแม็พการกระจายแบบสม่ำเสมอบนชุดของตัวเลขที่มีขนาดใหญ่ลงบนเซตที่เล็กกว่าผ่านโมดูโลหรือการคูณ (หรือการดำเนินการอื่น ๆ ที่กระจายค่าอย่างสม่ำเสมอ) ชุดที่ใหญ่กว่าจะต้องมีค่าที่เป็นไปได้อย่างน้อย 1024 เท่าของชุดที่เล็กกว่า
เนื่องจากพาร์ติชั่นนั้นเป็นหลายชุดคุณอาจส่งคืนพาร์ติชั่นเหล่านั้นในลำดับใดก็ได้และคำสั่งนี้ไม่จำเป็นต้องสอดคล้องกัน อย่างไรก็ตามสำหรับจุดประสงค์ของการแจกแจงแบบสุ่มคำสั่งนั้นจะถูกละเว้น นั่นคือในตัวอย่างข้างต้น
{3,1,1}
,{1,3,1}
และ{1,1,3}
ร่วมกันต้องมีความน่าจะเป็น 1/7 ของการถูกส่งกลับ- อัลกอริทึมของคุณต้องมีรันไทม์ที่กำหนด
n
โดยเฉพาะอย่างยิ่งคุณไม่สามารถสร้างมัลติสุ่มและปฏิเสธพวกเขาหากพวกเขาไม่ได้สรุปผลการ n
เวลาซับซ้อนขั้นตอนวิธีการของคุณจะต้องเป็นพหุนามใน โดยเฉพาะอย่างยิ่งคุณไม่สามารถสร้างพาร์ติชันทั้งหมดและเลือกพาร์ติชันแบบสุ่มได้ (เนื่องจากจำนวนพาร์ติชันเพิ่มขึ้นแบบทวีคูณด้วยn
) คุณอาจสมมติว่า PRNG ที่คุณใช้อยู่สามารถส่งคืนค่าที่กระจายแบบสม่ำเสมอใน O (1) ต่อค่า- คุณต้องไม่ใช้ฟังก์ชันในตัวที่สามารถแก้ไขงานนี้ได้
คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบและรับอินพุตผ่าน STDIN หรือทางเลือกอื่นใกล้เคียงอาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ฟังก์ชันและสร้างเอาต์พุตผ่านค่าส่งคืนหรือโดยการพิมพ์ไปยัง STDOUT (หรือทางเลือกที่ใกล้เคียงที่สุด)
คุณอาจคิดว่าn ≤ 65
(เช่นจำนวนพาร์ติชันน้อยกว่า 2 21 ) ผลลัพธ์อาจอยู่ในรูปแบบรายการหรือรูปแบบสตริงที่สะดวกและชัดเจน
หากคุณส่งฟังก์ชั่นโปรดพิจารณาจัดเตรียมโปรแกรมทดสอบเล็กน้อยซึ่งเรียกใช้ฟังก์ชั่นหลายครั้งและพิมพ์ผลลัพธ์ ไม่เป็นไรหากพารามิเตอร์ต้องถูกปรับแต่งในโค้ด นี่เป็นเพียงเพื่อให้ผู้คนสามารถตรวจสอบได้ว่าการแก้ปัญหานั้นมีความสม่ำเสมออย่างน้อยประมาณกัน
นี่คือรหัสกอล์ฟดังนั้นการส่งที่สั้นที่สุด (เป็นไบต์) ชนะ และแน่นอนว่าการส่งสั้นที่สุดต่อผู้ใช้จะเข้าสู่กระดานผู้นำโดยรวมของซีรีย์ด้วย
ลีดเดอร์บอร์ด
โพสต์แรกของซีรีส์สร้างกระดานผู้นำ
เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มต้นทุกคำตอบด้วยบรรทัดแรกโดยใช้เทมเพลต Markdown ต่อไปนี้:
# Language Name, N bytes
ที่N
มีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัว ตัวอย่างเช่น
# Ruby, <s>104</s> <s>101</s> 96 bytes
(ภาษาไม่ปรากฏในปัจจุบัน แต่ตัวอย่างข้อมูลต้องการและแยกวิเคราะห์และฉันอาจเพิ่มกระดานผู้นำแบบแยกภาษาในอนาคต)