คุณมีเหรียญที่ผลิตหรือ0
1
แต่คุณสงสัยว่าเหรียญอาจมีอคติหมายความว่าความน่าจะเป็นของ0
(หรือ1
) ไม่จำเป็นต้อง 1/2
ที่รู้จักกันดีขั้นตอนที่จะ "เปลี่ยน" เหรียญลำเอียงเป็นเหรียญที่เป็นธรรม (คือเพื่อให้ได้ผลเท่ากัน) ที่เสนอโดยฟอนนอยมันน์เป็นดังนี้ สร้างบล็อก (ไม่ทับซ้อนกัน) ของสองเหรียญโยนจนกว่าทั้งสองค่าของบล็อกจะแตกต่างกัน และส่งออกค่าแรกในบล็อกนั้น (ค่าที่สองจะทำเช่นกัน แต่สำหรับวัตถุประสงค์ของการท้าทายนี้เราเลือกแรก) โดยสังหรณ์ใจ1
อาจมีแนวโน้มมากกว่า0
แต่01
และ10
จะมีโอกาสเท่ากัน
ตัวอย่างเช่นอินพุต1110...
จะยกเลิกบล็อกแรกจากนั้นสร้าง1
บล็อกจากบล็อกที่สอง ...
ขั้นตอนนี้มีราคาแพงเนื่องจากมีการใช้การทอยเหรียญหลายครั้งเพื่อสร้างผลลัพธ์เดียว
ความท้าทาย
ใช้ลำดับเลขศูนย์และจำนวนเต็มแทนการโยนเหรียญเดิมและสร้างผลลัพธ์จำนวนสูงสุดตามขั้นตอนข้างต้นจนกว่าจะหมดการป้อนข้อมูลทั้งหมด
บล็อกสุดท้ายอาจไม่สมบูรณ์ถ้าจำนวนค่าอินพุตเป็นเลขคี่ ตัวอย่างเช่นลำดับการป้อนข้อมูล11111
จะไม่สร้างผลลัพธ์ (บล็อกสองรายการแรกมีค่าเท่ากันและบล็อกที่สามไม่สมบูรณ์)
กฎระเบียบ
อินพุตสามารถมีจำนวนของค่าที่ไม่เป็นลบได้ไม่จำเป็นต้องเป็นค่าบวกหรือแม้แต่
รูปแบบอินพุตอาจเป็น:
- อาเรย์ของศูนย์และคน;
- สตริงของศูนย์และคนที่มีตัวคั่นตัวเลือก
รูปแบบผลลัพธ์อาจเป็น:
- สตริงของศูนย์และคนที่มีหรือไม่มีตัวคั่น;
- อาเรย์ของศูนย์และคน;
- สตริงที่มีศูนย์หรือหนึ่งเดียวคั่นด้วยขึ้นบรรทัดใหม่;
- รูปแบบที่สมเหตุสมผลและเหมาะสมกับภาษาของคุณ
รหัสกอล์ฟ ไบต์ที่น้อยที่สุดจะเป็นผู้ชนะ
กรณีทดสอบ
อินพุตและเอาต์พุตอยู่ที่นี่เพื่อถือว่าเป็นสตริง
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'