บริบท
Straw Pollเป็นเว็บไซต์ที่มีไว้สำหรับสร้างโพล / โพลที่ไม่เป็นทางการ เมื่อมีรายการตัวเลือกผู้ใช้สามารถเลือกตัวเลือกและโหวตได้ มีคุณสมบัติที่สำคัญมากสองอย่างของแบบสำรวจความคิดเห็น:
- สามารถดูผลลัพธ์ปัจจุบันก่อนลงคะแนนได้
- มักจะเป็นไปได้ที่จะเลือกหลายตัวเลือกซึ่งจะได้รับการปฏิบัติเช่นเดียวกับถ้าคุณลงคะแนนหลายครั้งหนึ่งตัวสำหรับแต่ละตัวเลือก
สิ่งหนึ่งที่สนุกกว่าการทำโพลสำรวจความคิดเห็นกำลังยุ่งกับผลลัพธ์ การหยุดชะงักมีสองประเภทหลัก:
- การหยุดชะงักง่ายๆซึ่งคุณลงคะแนนให้กับตัวเลือกทั้งหมด
- การหยุดชะงักขั้นสูงที่คุณเลือกอย่างมีกลยุทธ์เพื่อลงคะแนนเพื่อเพิ่มผล
ในการท้าทายนี้คุณจะเขียนโปรแกรมสำหรับการหยุดชะงักขั้นสูง
คณิตศาสตร์
สำหรับเรื่องทางคณิตศาสตร์เราสามารถพูดได้ว่ายิ่งจำนวนของเอนโทรปีของการโหวตมากเท่าไหร่ ซึ่งหมายความว่าการสำรวจความคิดเห็นที่ตัวเลือกเดียวมีการลงคะแนนทั้งหมดจะไม่ถูกรบกวนเลยในขณะที่การสำรวจความคิดเห็นที่ทุกตัวเลือกมีการลงคะแนนในจำนวนที่เท่ากันจะถูกขัดจังหวะมากที่สุด (นี่คือเป้าหมายสูงสุด)
เอนโทรปีของรายการตัวเลข[x1, x2, ..., xn]นั้นได้มาจากสมการต่อไปนี้จากวิกิพีเดีย P(xi)ความน่าจะเป็นของซึ่งเป็นxi xi / total_num_of_votesหากตัวเลือกได้รับคะแนนโหวตเป็นศูนย์จนถึงจะไม่รวมอยู่ในการสรุป (เพื่อหลีกเลี่ยงlog(0)) เพื่อจุดประสงค์ของเราลอการิทึมสามารถอยู่ในฐานที่คุณเลือก
ตัวอย่างเช่นเอนโทรปีของการ[3,2,1,1]ประมาณ1.277โดยใช้ฐานอี
ขั้นตอนต่อไปคือการกำหนดรูปแบบการลงคะแนนที่นำไปสู่การเพิ่มขึ้นของเอนโทรปี ฉันสามารถลงคะแนนสำหรับตัวเลือกชุดย่อยใด ๆ ได้ตัวอย่างเช่นการลงคะแนนของฉันอาจเป็น[1,0,1,0]ได้ [4,2,2,1]ถ้าสิ่งเหล่านี้เป็นคะแนนโหวตของฉันแล้วนับสุดท้ายคือ การคำนวณเอนโทรปี1.273ใหม่ให้ลดเอนโทรปีซึ่งหมายความว่านี่เป็นความพยายามอย่างยิ่งยวดที่จะหยุดชะงัก นี่คือตัวเลือกอื่น ๆ :
don't vote
[3,2,1,1] -> 1.277
vote for everything
[4,3,2,2] -> 1.342
vote for the 1s
[3,2,2,2] -> 1.369
vote for the 2 and 1s
[3,3,2,2] -> 1.366
จากนี้เราสามารถสรุปได้ว่ารูปแบบการลงคะแนนที่ดีที่สุดคือ[0,0,1,1]เนื่องจากมันให้การเพิ่มขึ้นของเอนโทรปี
อินพุต
อินพุตเป็นรายการที่ไม่ว่างเปล่าของจำนวนเต็มที่ไม่ได้เพิ่มและไม่เป็นลบ ตัวอย่างเช่น[3,3,2,1,0,0], หรือแม้กระทั่ง[123,23,1] [4]รูปแบบที่เหมาะสมใด ๆ ที่อนุญาต
เอาท์พุต
เอาท์พุทเป็นรายการ (ความยาวเท่ากับอินพุต) ของค่าความจริงและความเท็จซึ่งความจริงเป็นตัวแทนของตัวเลือกที่ฉันควรลงคะแนนหากฉันต้องการทำให้เกิดการหยุดชะงักสูงสุด หากรูปแบบการลงคะแนนมากกว่าหนึ่งแบบให้เอนโทรปีเดียวกันสามารถส่งออกแบบใดแบบหนึ่งได้
เกณฑ์การชนะ
นี่คือโค้ดกอล์ฟซึ่งมีจำนวนไบต์น้อยกว่าดีกว่า
กรณีทดสอบ
[3,2,1,1] -> [0,0,1,1] (from 1.227 to 1.369)
[3,3,2,1,0,0] -> [0,0,0,1,1,1] (from 1.311 to 1.705)
[123,23,1] -> [0,1,1] (from 0.473 to 0.510)
[4] -> [0] OR [1] (from 0 to 0)
[7,7,6,6,5] -> [0,0,1,1,1] (from 1.602 to 1.608)
[100,50,1,1] -> [0,1,1,1] (from 0.707 to 0.761)
