pengantar
Dengan serangkaian persentase pilihan dalam jajak pendapat, hitung jumlah pemilih minimum yang harus ada dalam jajak pendapat untuk menghasilkan statistik tersebut.
Contoh: Apa peliharaan kesayangan Anda?
- Anjing:
44.4%
- Kucing:
44.4%
- Mouse:
11.1%
Output: 9
(minimum yang mungkin # dari pemilih)
Spesifikasi
Berikut persyaratan untuk program / fungsi Anda:
- Anda diberi array nilai persentase sebagai input (pada stdin, sebagai argumen fungsi, dll.)
- Setiap nilai persentase adalah angka yang dibulatkan ke satu tempat desimal (misalnya,
44.4 44.4 11.1
). - Hitung jumlah pemilih minimum yang mungkin dalam jajak pendapat yang hasilnya akan menghasilkan persentase yang tepat ketika dibulatkan ke satu tempat desimal (pada stdout, atau nilai pengembalian fungsi).
- Bonus : -15 karakter jika Anda dapat menyelesaikan dengan cara "non-sepele" (yaitu, tidak melibatkan iterasi melalui setiap # pemilih yang mungkin sampai Anda menemukan yang pertama yang berfungsi)
Contoh
>./pollreverse 44.4 44.4 11.1
9
>./pollreverse 26.7 53.3 20.0
15
>./pollreverse 48.4 13.7 21.6 6.5 9.8
153
>./pollreverse 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 99.6
2000
>./pollreverse 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 98.7
667
>./pollreverse 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 98.7
2000
>./pollreverse 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 97.8
401
Mencetak gol
Ini adalah kode-golf, sehingga karakter terpendek yang mungkin menang. Bonus apa pun dikurangi lebih lanjut dari jumlah karakter total.
code-golf
math
reverse-engineering
mellamokb
sumber
sumber
26.7 53.3 20.0
(4 8 3 dari 15),48.4 13.7 21.6 6.5 9.8
(74 21 33 10 15 dari 153) dll.0.5%
dari total, dan setiap kali ada pembulatan ke atas, Anda menambahkan hingga0.5%
total. Empat kasus uji terakhir sengaja dibuat untuk mengeksploitasi fenomena ini secara optimal. Dalam kasus uji pertama yang menghasilkan2000
, masing-masing dari 9 entri pertama mewakili1
suara (dan semuanya dibulatkan0.5%
), sedangkan yang terakhir mewakili1991
suara (dan dibulatkan ke bawah ~0.5%
). Jika Anda menghitung persentase tersebut secara manual dan membulatkan ke 1 tempat desimal, Anda akan melihat semuanya benar.Jawaban:
APL (Dyalog Classic) ,
4843 byte-5 byte oleh Adám
Program penuh mengambil input dari stdin.
Cobalah online! Tautan ke versi dfn.
Tidak disatukan
Cobalah online!
normalize
membagi (÷
) semua elemen argumen kanannya (⊢
) dengan jumlahnya (+/
).round(y)
membulatkan y ke 3 tempat desimal dengan memformat (⍕
) dan kemudian mengevaluasi (⍎
) setiap elemen y.find_max(y)
mengembalikan array dengan 1 di mana maks (y) ditemukan dan 0 di tempat lain.increase(x,y)
mengambil x (persentase sasaran) dan y (array total suara saat ini) dan menghitung di mana menambahkan 1 dalam y untuk membawa persentase lebih dekat ke x.vote_totals(x,y)
mengambil x (persentase sasaran) dan y (total suara awal) dan mengeksekusi f berulang kali, menambahkan suara sampai persentase putaran ke x.f ⍣ g
berarti mengeksekusif
berulang kali sampaig(y,f(y))
benar. Dalam hal ini kita abaikanf(y)
.h(x)
set y ke 0 (setara dengan array 0s karena vektorisasi), mengeksekusi g, dan menjumlahkan total suara akhir.sumber
Python, 154
Ini berfungsi untuk contoh terakhir sekarang.
Contoh berjalan:
sumber
99.1
sebagai nilai terakhir1/2000 = 0.05%
(0.1%
Bulat) dan1991/2000 = 99.55%
(99.6%
Bulat). Jadi, jika ada sepuluh opsi dalam jajak pendapat dan sembilan di antaranya akan dipilih satu kali sementara yang terakhir mendapatkan suara pada tahun 1991, maka itu akan memberikan persentase tersebut.J, 57 karakter
Menggunakan metode trivial. Dibutuhkan input dari keyboard.
t
membuat tabel pencarian dan baris kedua mencari input di dalam tabel. Saya dapat memberikan penjelasan kode yang diperluas jika ada yang tertarik.Saya telah melihat ke dalam menggunakan persentase untuk membuat pecahan kemudian mendapatkan bentuk pecahan terendah untuk mencari tahu angka, tetapi saya tidak bisa menemukan cara untuk membuatnya bekerja dengan pembulatan hasil.
sumber
Python, 154
sumber
[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,99.6]
?1/2000 = 0.05%
(0.1%
Bulat) dan1991/2000 = 99.55%
(99.6%
Bulat). Jadi itu benar-benar total 100%, tetapi pembulatan membuatnya sangat membingungkan.VBA - 541
Ini memiliki beberapa kesalahan mencolok, tetapi itu adalah usaha saya untuk menemukan solusi non-sepele / perulangan-sampai-saya-dapatkan-nomor-yang benar. Saya belum sepenuhnya bermain golf, meskipun saya pikir tidak banyak yang bisa ditambahkan dalam hal itu. Namun, saya telah menghabiskan terlalu banyak waktu untuk hal ini, dan itu menyakitkan kepala saya sekarang. Belum lagi, aturannya mungkin sangat rusak dan berlaku kurang lebih hanya untuk contoh-contoh ini saja.
Ini sangat baik untuk banyak tes sederhana yang saya jalankan, (yaitu bahkan total, 2 atau 3 input) tetapi gagal untuk beberapa tes yang disajikan oleh tantangan. Namun, saya menemukan bahwa jika Anda meningkatkan ketepatan desimal input (di luar lingkup tantangan), akurasi meningkat.
Sebagian besar pekerjaan melibatkan menemukan gcd untuk set angka yang disediakan, dan saya agak berhasil
Function g()
, meskipun pasti tidak lengkap dan kemungkinan menjadi sumber setidaknya beberapa kesalahan dalam output saya.Input adalah string nilai yang dibatasi ruang.
Testcases (input ==> diharapkan / dikembalikan):
sumber
Debug.Print
keDebug.?
C # (.NET Core) , 286 byte
Cobalah online!
Menyimpan banyak byte berkat Peter Taylor dan Perwujudan Ketidaktahuan
sumber
}
di akhir.Zip
metode Linq .1>0
lebih pendek daripadatrue
, itu lebih disukai.Python 3 ,
140139137 byteCobalah online!
Memberikan jawaban yang tepat untuk dua kasus uji pertama, dan mengalami batas rekursi Python untuk yang lain. Ini tidak terlalu mengejutkan, karena setiap pemeriksaan dilakukan pada tingkat rekursi baru. Pendek, meskipun ...
(Penjelasan tentang variabel yang digunakan dapat ditemukan di tautan TIO)
harus bekerja untuk 136 byte, tetapi bukan karena presisi float.
sumber