Ini pemilihan! Area tempat kami menerapkan sistem pemungutan suara yang disebut limpasan instan (kadang-kadang disebut pemilihan alternatif atau pemilihan preferensial ). Setiap pemilih memerintahkan setiap kandidat dari yang paling disukai sampai yang paling tidak disukai, menandai "1" untuk kandidat yang paling disukai mereka, "2" untuk kandidat kedua mereka, dan seterusnya hingga setiap kandidat diberi nomor. Saya akan membiarkan koala yang ramah ini menjelaskan sisanya:
(Gambar dimodifikasi dari aslinya oleh Patrick Alexander , digunakan di bawah lisensi CC BY-NC-SA 3.0 AU ).
Jika Anda lebih suka penjelasan limpasan instan Anda dalam bentuk teks, ada juga artikel Wikipedia .
(Catatan: Ini juga mungkin, meskipun tidak mungkin, untuk ada dua atau lebih kandidat dengan suara terbanyak. Dalam situasi ini, pilih salah satu dari mereka secara acak pada probabilitas yang sama dan hilangkan mereka.)
Dalam tantangan ini, baris input pertama adalah daftar string, yang merupakan nama-nama kandidat untuk pemilihan. Dalam contoh-contoh ini saya telah menggunakan nilai batas pipa, meskipun merasa bebas untuk menyesuaikan format input yang sesuai dengan bahasa Anda.
The Omitted Anti-neutrino|Placazoa|Alexander the Awesome|Tau Not Two|Semolina Sorcerer
Berikut ini adalah n
baris input yang juga daftar string, yang masing-masing mewakili satu suara. Entri pertama menyatakan bahwa preferensi # 1 suara, berikutnya preferensi # 2, dll. Misalnya:
Alexander the Awesome|Semolina Sorcerer|Tau Not Two|Placazoa|The Omitted Anti-neutrino
akan berarti bahwa suara tertentu memiliki Alexander sebagai preferensi pertama mereka, Semolina Sorcerer sebagai yang kedua, Tau Bukan Dua sebagai yang ketiga, dll. Anda dapat mengasumsikan bahwa setiap suara akan berisi setiap kandidat, dan bahwa tidak akan ada suara yang kosong atau tidak lengkap.
Dengan memberikan suara sebagai input, program atau fungsi Anda kemudian akan menghasilkan pemenang pemilihan. Anda dapat menemukan implementasi referensi tak bertali di Python 3 di sini .
Contoh Input dan Output
Memasukkan
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Portal Butter|Alexander the Awesome|Dionysius|Red Trainmen
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Portal Butter|Red Trainmen|Alexander the Awesome|Dionysius
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Alexander the Awesome|Red Trainmen|Portal Butter|Dionysius
Red Trainmen|Alexander the Awesome|Dionysius|Portal Butter
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Red Trainmen|Dionysius|Portal Butter|Alexander the Awesome
Alexander the Awesome|Dionysius|Red Trainmen|Portal Butter
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Alexander the Awesome|Red Trainmen|Dionysius|Portal Butter
Keluaran
Alexander the Awesome
Memasukkan
Depressed Billy|Sighted Citrus|Frosty Fox|Electronic Accident
Frosty Fox|Sighted Citrus|Electronic Accident|Depressed Billy
Frosty Fox|Depressed Billy|Sighted Citrus|Electronic Accident
Depressed Billy|Electronic Accident|Sighted Citrus|Frosty Fox
Depressed Billy|Sighted Citrus|Electronic Accident|Frosty Fox
Depressed Billy|Electronic Accident|Sighted Citrus|Frosty Fox
Electronic Accident|Frosty Fox|Depressed Billy|Sighted Citrus
Sighted Citrus|Frosty Fox|Electronic Accident|Depressed Billy
Frosty Fox|Depressed Billy|Sighted Citrus|Electronic Accident
Sighted Citrus|Electronic Accident|Frosty Fox|Depressed Billy
Frosty Fox|Electronic Accident|Depressed Billy|Sighted Citrus
Sighted Citrus|Frosty Fox|Depressed Billy|Electronic Accident
Keluaran
Sighted Citrus
atau Frosty Fox
(secara acak)
Memasukkan
Anda bisa mendapatkan set input terakhir di sini . Ini adalah salah satu area pemungutan suara dari pemilihan Australia baru-baru ini, dan terdiri dari 63.428 suara.
Keluaran
Ross HART
Jawaban:
Pyth - 30 byte
Akan refactor itu. Disimpulkan dari baris pertama dari sisa input.
Test Suite .
sumber
R ,
10199 byteCobalah online!
Mengambil input sebagai matriks, dengan setiap kolom mewakili pilihan satu pemilih. Bekerja dengan rekursi: temukan kandidat dengan jumlah suara minimal, hapus semua entri yang sesuai dalam matriks, format ulang matriks, dan rekur ulang hingga matriks hanya memiliki 1 baris.
Suara pada setiap iterasi dihitung dengan menghitung dengan
table
nilai-nilai di baris atas, yang merupakan pilihan teratas saat ini dari setiap pemilih. Ini dikocok dengansample
untuk memutuskan ikatan secara acak.n<-dim(m)-1
memberikan vektor panjang 2, tetapi hanya nilai pertama yang digunakan (jadi itu setara, tetapi 1 byte lebih pendek dari,n<-nrow(m)-1
). Nilai ini digunakan dua kali: pertama dibandingkan dengan 0 untuk memeriksa apakah iterasi terakhir telah tercapai; kedua, jika kita berulang, itu adalah jumlah baris dari matriks baru.sumber
Python 2 , 209 byte
Cobalah online!
Mengambil input sebagai daftar daftar preferensi pemilih (baris tajuk tidak termasuk). Pengacakan dalam kasus dasi menjengkelkan!
sumber
Perl 5
-plF\|
, 155 byteCobalah online!
sumber
Python 2 , 200 byte
Cobalah online!
Memanfaatkan ID objek dari array sebagai sumber 'keacakan'.
Didasarkan atas Jawaban Chas Brown - Saya tidak punya cukup perwakilan untuk berkomentar!
sumber