Konteks
Straw Poll adalah situs web yang dimaksudkan untuk menciptakan jajak pendapat sederhana / informal. Dilengkapi dengan daftar opsi, pengguna dapat memilih pilihan mereka, dan suara dihitung. Ada dua fitur yang sangat penting dari Poll Straw:
- Dimungkinkan untuk melihat hasil saat ini sebelum memilih
- Seringkali dimungkinkan untuk memilih beberapa opsi, yang diperlakukan dengan cara yang sama seperti jika Anda memilih beberapa kali, satu untuk setiap opsi.
Satu hal yang lebih menyenangkan daripada membuat Straw Polls adalah mengacaukan hasilnya. Ada dua jenis gangguan utama:
- Gangguan sederhana, di mana Anda memilih semua opsi
- Gangguan tingkat lanjut, di mana Anda secara strategis memilih opsi mana yang akan dipilih untuk memaksimalkan efeknya.
Dalam tantangan ini, Anda akan menulis sebuah program untuk gangguan lanjut .
Matematika
Untuk hal-hal sederhana secara matematis, kita dapat mengatakan bahwa semakin tinggi entropi suara, semakin terganggu jajak pendapat. Ini berarti bahwa jajak pendapat di mana satu opsi memiliki semua suara tidak terganggu sama sekali, sedangkan jajak pendapat di mana setiap opsi memiliki jumlah suara yang sama terganggu secara maksimal (ini menjadi tujuan akhir).
Entropi daftar angka [x1, x2, ..., xn]
diberikan oleh persamaan berikut dari wikipedia. P(xi)
adalah probabilitas xi
, yaitu xi / total_num_of_votes
. Jika opsi telah menerima nol suara sejauh ini, itu sama sekali tidak termasuk dalam penjumlahan (untuk menghindari log(0)
). Untuk tujuan kami, logaritma dapat berada di basis pilihan Anda.
Sebagai contoh, entropi [3,2,1,1]
kira-kira 1.277
, menggunakan basis e .
Langkah selanjutnya adalah menentukan pola pemungutan suara apa yang mengarah pada peningkatan entropi terbesar. Saya dapat memberikan suara untuk setiap subset opsi, jadi misalnya suara saya bisa [1,0,1,0]
. Jika ini suara saya, maka penghitungan akhir adalah [4,2,2,1]
. Menghitung ulang entropi memberi 1.273
, memberikan penurunan entropi, yang berarti ini adalah upaya yang mengerikan pada gangguan. Berikut beberapa opsi lain:
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
Dari sini, kita dapat menyimpulkan bahwa pola pemungutan suara yang optimal adalah [0,0,1,1]
karena ia memberikan peningkatan terbesar dalam entropi.
Memasukkan
Input adalah daftar non-kosong bilangan bulat yang tidak bertambah, tidak negatif. Contohnya termasuk [3,3,2,1,0,0]
, [123,23,1]
atau bahkan [4]
. Setiap format yang masuk akal diijinkan.
Keluaran
Output adalah daftar (panjang yang sama dengan input) dari nilai-nilai kebenaran dan falsey, di mana kebenaran mewakili pilihan yang harus saya pilih jika saya ingin menyebabkan gangguan maksimal. Jika lebih dari satu pola pemungutan suara memberikan entropi yang sama, salah satunya bisa jadi keluaran.
Kriteria Kemenangan
Ini kode-golf, lebih sedikit byte lebih baik.
Uji Kasus
[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)
Jawaban:
Mathematica,
1944 byte... (mengeluh keras)
Uji:
sumber
{100,50,1,1}
tempat kembali{False, False, True, True}
, mengakibatkan entropi dari0.758
.{False, True, True, True}
menghasilkan entropi dari0.761
.Pyth - 25 byte
Test Suite .
sumber
MATL , 24 byte
Ini bekerja dengan versi 13.0.0 dari bahasa / kompiler, yang lebih awal dari tantangan.
Cobalah online!
Penjelasan
Contoh
Berikut ini contoh cara kerjanya. Untuk input
[3 2 2]
, susunan dari pola pemilihan yang mungkin (dihasilkan olehZ^
) adalahdi mana setiap baris adalah sebuah pola. Ini ditambahkan ke aslinya
[3 2 0]
dengan siaran (G+
). Itu berarti[3 2 0]
direplikasi8
kali secara vertikal dan kemudian ditambahkan elemen bijaksana untuk diberikanIni ditransposisikan dan setiap kolom dibagi dengan jumlah masing-masing (
!ts/
):Mengalikan dengan logaritma dan menjumlahkan setiap kolom (
tYl*s
) memberikan minus entropi:Entropi dikurangi diminimalkan (
4#X<
) oleh4
pola suara th, yang sesuai (Y)
) dengan hasil akhir[0 1 1]
.sumber