Skenarionya
Anda tinggal di negara yang memiliki pemilihan presiden. Setiap pemilih mendapat satu suara, dan karena itu ada sistem dua partai yang mengakar kuat. (Pihak ketiga ada, tetapi mendapatkan suara hampir tidak ada).
Jajak pendapat terbaru menunjukkan perlombaan dalam panas yang mematikan:
- 49%: Alberto Arbusto
- 49%: Jorge Sangre
- 2%: berbagai kandidat kecil
Persyaratan program
Anda telah disewa oleh pemerintah untuk menulis bagian dari perangkat lunak penghitungan suara. Anda akan diberikan, pada input standar, daftar unordered suara satu polisi, satu per baris, seperti ini:
Alberto Arbusto
Jorge Sangre
Jorge Sangre
Alberto Arbusto
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
Jorge Sangre
Juan Perez
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
…
dan, setelah itu telah membaca semua suara, menghasilkan ringkasan dari berapa banyak suara yang diperoleh setiap kandidat, disortir dalam urutan menurun berdasarkan jumlah suara, seperti ini:
492 Jorge Sangre
484 Alberto Arbusto
18 Juan Perez
6 Mickey Mouse
Bagian yang curang
Anda adalah hack partisan yang ingin mencuri pemilihan untuk salah satu dari dua kandidat utama (Anda dapat memilih yang mana). Jadi, program Anda harus dengan sengaja mencetak jumlah suara yang salah , dengan bias sistematis terhadap kandidat favorit Anda.
Tentu saja, Anda harus melakukan ini sedemikian rupa sehingga orang yang melihat kode Anda atau hasilnya mungkin tidak akan mengenali perilaku yang salah.
...you can choose which one...
Bisakah saya memilih yang namanya pertama?sort|uniq -c
...Jawaban:
Scala
Hidup lama Alberto Arbusto!
Alberto Arbusto akan hampir selalu keluar sedikit di depan Jorge Sangre, asalkan cukup banyak suara yang diberikan (~ 10.000). Tidak perlu mengutak-atik suara sendiri.
Catatan: Kode ini secara longgar didasarkan pada kumpulan koneksi "kustom" yang saya temui pada suatu proyek. Kami butuh berminggu-minggu untuk mencari tahu mengapa aplikasi itu selalu keluar dari koneksi.
sumber
Rubi
Jorge Sangre akan mendapatkan peningkatan substansial dalam penghitungan suaranya (misalnya, 492 suara akan dilaporkan sebagai 754). Suara Alberto akan dilaporkan secara akurat.
sumber
Pesta
(Apakah ini memenuhi spesifikasi?)
Seperti biasa, ini membutuhkan tindakan pencegahan ekstra untuk memastikan hasil yang valid.
uniq -c
awalan setiap baris dengan berapa kali itu terjadi. Ini pada dasarnya melakukan semua pekerjaan.Untuk berjaga
uniq -c
- jaga jika terjadi kesalahan, kami sekarang mengurutkan hasilnya berdasarkan nama-nama kandidat dalam urutan terbalik, kemudian menjalankannyauniq -f1
(jangan mencetak garis duplikat, mengabaikan bidang pertama [jumlah suara]) untuk menghapus kandidat duplikat. Akhirnya kita gunakansort -gr
untuk mengurutkan dalam urutan "General Numeric" dan "Reverse" (urutan menurun dengan jumlah suara).sumber
C #
Kandidat pertama dalam file teks akan selalu menang!Itu akan menjadikan Alberto Arbusto pemenang!
sumber
SortedDictionary
akan mengurutkan kandidat berdasarkan abjad.Dictionary<TK,TV>
kelas, seperti yang diterapkan, menyimpan indeks ke dalam array dukungan item yang sebenarnya. ADictionary<TK,TV>
dari mana tidak ada item yang pernah dihapus akan menyebutkan elemen dalam urutan mereka ditambahkan; perilaku seperti itu tidak ditentukan, tetapi sudah ada di tempatnya cukup lama saya tidak akan mengharapkan MS untuk pernah mengubahnya.C
Suvenir Jorge Sangre.
Dalam pengujian dengan file suara yang dibuat secara acak, bahkan ketika Alberto Arbusto menerima hingga 1,4% lebih dari suara yang sebenarnya (49,7% vs 48,3% untuk Jorge Sangre), orang saya Jorge Sangre biasanya memenangkan hitungan.
sumber
Python
Penghitungan suara akan mendukung kandidat lebih dekat ke akhir daftar.
sumber
tr | sed | dc
Ini menghitung teman saya Alberto dua kali setiap kali.
"Oh -
tr
? Yah, itu hanya perlu karena komputer tidak terlalu bagus dengan huruf kapital - lebih baik jika mereka semua huruf kecil .... Ya, aku tahu, komputer itu gila."KELUARAN
Ini versi lain yang memberikan suara Juan Perez ke Jorge Sangre:
KELUARAN
sumber
JavaScript
Orang terakhir dalam daftar kandidat akan selalu menang.
sumber