bağlam
Straw Poll , basit / gayri resmi anketlerin oluşturulması için hazırlanmış bir web sitesidir. Seçeneklerin bir listesi ile, kullanıcı seçimlerini seçebilir ve oylar hesaplanır. Saman Anketinin iki çok önemli özelliği vardır:
- Oylamadan önce mevcut sonuçları görmek mümkündür
- Her seçenek için birden fazla oy vermiş gibi muamele gören birden fazla seçenek seçmek genellikle mümkündür.
Straw Polls yapmaktan daha eğlenceli olan tek şey, sonuçlarla uğraşmaktır. İki ana aksama türü vardır:
- Tüm seçenekler için oy verdiğiniz basit aksama
- Etkiyi en üst düzeye çıkarmak için hangi seçeneklere oy vereceğinizi stratejik olarak seçtiğiniz gelişmiş aksama.
Bu zorlukta, gelişmiş aksama için bir program yazacaksınız .
Matematik
Matematiksel olarak basitçe söylemek gerekirse , oyların entropisi ne kadar yüksek olursa, bir anketin o kadar kesintiye uğradığını söyleyebiliriz . Bu, tek bir seçeneğin tüm oylara sahip olduğu bir anketin hiçbir şekilde kesintiye uğramayacağı anlamına gelirken, her seçeneğin eşit sayıda oyu olduğu bir anketin maksimum düzeyde kesintiye uğradığı anlamına gelir (bu nihai hedeftir).
Bir sayı listesinin entropisi, [x1, x2, ..., xn]wikipedia'dan aşağıdaki denklemle verilir. P(xi)olasılığıdır xi, olduğu xi / total_num_of_votes. Bir seçenek şimdiye kadar sıfır oy aldıysa, sadece toplamda yer almaz (kaçınmak için log(0)). Bizim amacımız için, logaritma seçtiğiniz herhangi bir bazda olabilir.
Örnek olarak, entropisi [3,2,1,1]yaklaşık olarak 1.277, e tabanını kullanır .
Bir sonraki adım, hangi oy modelinin entropide en büyük artışa yol açtığını belirlemektir. Seçeneklerin herhangi bir alt kümesine oy verebilirim, örneğin benim oyum olabilir [1,0,1,0]. Eğer bunlar benim oyum olsaydı, son çeteledir [4,2,2,1]. Entropinin yeniden hesaplanması, entropide 1.273bir azalma sağlar , bu da bunun bozulmaya yönelik korkunç bir girişim olduğu anlamına gelir. İşte diğer bazı seçenekler:
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
Buradan, optimal oylama modelinin[0,0,1,1] entropide en büyük artışı verdiği için olduğu sonucuna varabiliriz .
Giriş
Girdi, boş olmayan, negatif olmayan tam sayıların bir listesidir. Örnekler arasında [3,3,2,1,0,0], [123,23,1]ve hatta vardır [4]. Herhangi bir makul biçime izin verilir.
Çıktı
Çıktı, doğruluk ve falsey değerlerinin bir listesidir (girdi ile aynı uzunluktadır); burada gerçekler, maksimum bozulmaya neden olmak istiyorsam oy kullanmam gereken seçenekleri temsil eder. Birden fazla oy pusulası aynı entropiyi veriyorsa, bunlardan biri verilebilir.
Kazanan Ölçüt
Bu kod golf, daha az bayt daha iyidir.
Test Durumları
[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)
