พื้นหลัง
ฉันมีชุด "ถุงเท้าวันทำงาน" ซึ่งเป็นถุงเท้าเจ็ดคู่ที่ติดป้ายชื่อโดยวันในสัปดาห์ เมื่อฉันล้างถุงเท้าของพวกเขาพวกเขาจบลงด้วยกองและฉันต้องจัดให้พวกเขาเป็นคู่ที่ถูกต้องก่อนที่จะนำพวกเขาเข้าไปในตู้เสื้อผ้า กลยุทธ์ของฉันคือดึงถุงเท้าแบบสุ่มหนึ่งอันออกจากกองพร้อมกันแล้ววางลงบนลิ้นชัก เมื่อใดก็ตามที่มีถุงเท้าคู่ที่ตรงกันบนลิ้นชักฉันผูกพวกเขาเข้าด้วยกันและวางไว้ในตู้เสื้อผ้า งานของคุณคือการจำลองกระบวนการสุ่มนี้และคืนจำนวนการจับที่ต้องการเพื่อหาคู่แรกที่จับคู่
อินพุต
ข้อมูลของคุณเป็นจำนวนเต็มN ≥ 1 มันหมายถึง "จำนวนวันในหนึ่งสัปดาห์": มีNคู่ของถุงเท้าในกองและแต่ละคู่มีป้ายชื่อที่แตกต่างกัน หากจำเป็นคุณอาจใช้เมล็ดพันธุ์ PRNG เป็นอินพุตได้
เอาท์พุต
ผลลัพธ์ของคุณคือจำนวนถุงเท้าที่ฉันต้องวาดก่อนที่จะพบคู่แรกที่ตรงกัน 2ตัวอย่างเช่นถ้าทั้งสองถุงเท้าแรกแล้วแบบคู่จับคู่ออกเป็น
แน่นอนว่าผลลัพธ์เป็นแบบสุ่มและขึ้นอยู่กับลำดับการวาด เราคิดว่าคำสั่งซื้อรูปวาดทั้งหมดมีโอกาสเท่ากันดังนั้นในแต่ละครั้งที่มีการดึงถุงเท้าตัวเลือกจะเหมือนกันและเป็นอิสระจากตัวเลือกอื่น ๆ ทั้งหมด
ตัวอย่าง
ให้N = 3 , เพื่อให้เรามี 6 ถุงเท้ารวมป้ายAABBCC หนึ่งในการทำงานที่เป็นไปได้ของ "sock-drawing protocol" มีดังต่อไปนี้:
| Pile | Drawer | Pairs
Begin | AABBCC | - | -
Draw B | AABCC | B | -
Draw C | AABC | BC | -
Draw B | AAC | C | BB
Draw A | AC | AC | BB
Draw A | C | C | AA BB
Draw C | - | - | AA BB CC
ทั้งคู่จับคู่เป็นครั้งแรกที่พบว่าหลังจากการวาดภาพที่สองB3ซึ่งเป็นถุงเท้าที่สามที่จะวาดเพื่อการส่งออกที่ถูกต้องคือ
กฎและการให้คะแนน
คุณสามารถเขียนโปรแกรมเต็มรูปแบบหรือฟังก์ชั่น จำนวนไบต์ต่ำสุดที่ชนะและช่องโหว่มาตรฐานไม่ได้รับอนุญาต อินพุตและเอาต์พุตสามารถอยู่ในรูปแบบที่เหมาะสมรวมถึง unary (สตริงจำนวน1s)
คุณอาจคิดว่า RNG ในตัวของคุณสมบูรณ์แบบ คุณไม่จำเป็นต้องจำลองโปรโตคอลการวาดถุงเท้าตราบใดที่ผลลัพธ์ของคุณมีการแจกแจงความน่าจะเป็นที่ถูกต้อง
"กรณีทดสอบ"
นี่คือความน่าจะเป็นโดยประมาณของเอาต์พุตทั้งหมดสำหรับอินพุตN = 7 :
Output 2 3 4 5 6 7 8
Probability 0.077 0.154 0.210 0.224 0.186 0.112 0.037
ในการทดสอบโซลูชันของคุณคุณสามารถเรียกใช้พูด 40,000 ครั้งและดูว่าการกระจายสัญญาณใกล้เคียงกับเหตุผลนี้หรือไม่
Draw all socks. End up with an odd number.