90% gagal tantangan ini?

8

Saya kira saya bukan satu-satunya yang pernah melihat gambar semacam ini di Facebook (dan situs lainnya).

Selesaikan !!!!

Gambar di atas telah diposting 16 hari yang lalu, dan telah mengumpulkan 51 k komentar. Beberapa jawaban: 0, 4, 8, 48, 88, 120, 124 dan seterusnya.

Tantangan:

Matematika dalam pertanyaan tidak masuk akal 1 , jadi kami tidak dapat menemukan jawaban yang benar dengan melihat persamaan (atau apa pun yang Anda sebut kekacauan angka dan operator). Namun, ada sejumlah besar orang yang menjawab, dan 10% dari mereka benar!

Mari temukan jawaban yang tepat!


Ambil bilangan bulat, persen, nilai desimal dalam 0-1, atau fraksi yang Nmewakili berapa persen dari kelompok uji yang gagal menjawab pertanyaan (atau secara opsional berapa banyak yang menjawab dengan benar), dan daftar angka yang mewakili jawaban yang diposkan orang.

Temukan angka yang 100-Ndijawab oleh persen dari kelompok uji dan hasilkan. Jika ada lebih dari satu jawaban yang cocok dengan kriteria ini, maka Anda harus menampilkan semuanya. Jika tidak ada jawaban yang diwakili 100-Npersen dari waktu maka Anda harus menampilkan nomor yang terdekat (diukur dalam jumlah jawaban dari 100-N).

Untuk membuat aturan masukan untuk Nyang jelas: Jika 90% gagal, maka Anda mungkin masukan 90, 10, 0.9atau 0.1. Anda harus menentukan yang mana yang Anda pilih. Anda dapat mengasumsikan bahwa angka persentase adalah bilangan bulat.


Kasus uji:

Dalam kasus uji di bawah ini, Nadalah persentase yang gagal tes. Anda dapat memilih untuk memasukkan menggunakan salah satu metode input yang diizinkan.

N:  90   (meaning 90 % will fail and 10 % answer correctly)
List: 3 1 5 6 2 1 3 3 2 6
Output: 5   (because 90 % of the answers weren't 5)
---
N:  50   (50 % will answer correctly)
List: 3 6 1 6
Output: 6   (because 50 % of the answers weren't 6)
---
N:  69   (31 % will answer correctly)
List: 1 9 4 2 1 9 4 3 5 1 2 5 2 4 4 5 2 1 6 4 4 3
Output: 4    (because 31% of 22 is 6.82. There are 6 fours, which is the 
              closest to 6.82)
---
N = 10   (90 % will answer correctly)
List: 1 2 3 4 5 6 7 8 9 10
Output: 1 2 3 4 5 6 7 8 9 10 (because 9/10 will answer correctly. All numbers
                              have been answered the same number of times, thus
                              all are equally likely to be correct.
---
N:  90
List: 1 1 1
Output: 1

1 Tolong jangan berdebat dengan saya di sini. Jika Anda "tahu" jawabannya , bergabunglah dengan 10% lainnya dan posting di Facebook!

Stewie Griffin
sumber
Kotak pasir .
Stewie Griffin
Berapakah jumlah maksimum item dalam daftar, jika ada?
Kevin Cruijssen
1
@KevinCruijssen Anda mungkin tidak mengasumsikan nilai maksimum. Maksimum ditentukan oleh memori / tipe data. Tantangannya didasarkan pada posting dengan komentar 51k, jadi sebaiknya mencakup setidaknya banyak item.
Stewie Griffin
1
Apa yang harus kita lakukan jika lebih dari satu jawaban sama dekat seperti dalam contoh [1,3,3,3], 0.5? Apakah kita perlu menampilkan keduanya dalam kasus itu?
Emigna
@Emigna ya, output keduanya. Lihat test case ke-4.
Stewie Griffin

Jawaban:

6

MATL , 16 14 byte

-1 byte terima kasih kepada @Giuseppe

-1 byte terima kasih kepada @LuisMendo

SY'ts/i-|tX<=)

Penjelasan:

        % implicit input
S       % sort
Y'      % run-length encoding
ts      % duplicate elements and sum (get number of elements)
/       % array right division (get array of probability for each answer)
i-|     % get absolute difference with second input
tX<     % duplicate and get minimum value
=)      % get each answer that match with the minimum value
        % (implicit) convert to string and display

Cobalah online! atau verifikasi semua kasus uji

Cinaski
sumber
4

R , 65 byte

function(N,A,x=table(A))names(x)[!(y=(abs(1-x/sum(x)-N)))-min(y)]

Cobalah online!

Dibawa Nsebagai angka antara 0dan 1, dan Asebagai vektor (kadang-kadang diambil dari STDIN di tautan TIO jadi saya tidak perlu mengubahnya ke vektor R). Mengembalikan daftar string, sebagaimana diizinkan oleh OP .

function(N,A){
 x <- table(A)               # count occurrences of each value in A
 pct <- 1 - x/sum(x)         # compute percentages different from each value
 y <- abs(pct - N)           # find distances from N
 idx <- y!=min(y)            # find the indices of the minimum/minima
 names(x)[idx]               # return the names of the table (strings)
}
Giuseppe
sumber
1

JavaScript (ES7), 103 99 byte

Mengambil input sebagai (a, r)tempat a adalah daftar jawaban dan r adalah rasio keberhasilan yang diharapkan dalam [0 ... 1] . Pengembalian a Set.

(a,r,m)=>a.map(n=>(d=a.reduce((p,c)=>p-=c==n,r*a.length)**2)>m||(d==m?s:(m=d,s=new Set)).add(n))&&s

Uji kasus

Arnauld
sumber
0

Python 2 , 91 byte

def f(l,p):c=[(abs(len(l)*p-l.count(a)),a)for a in l];print{v for x,v in c if x==min(c)[0]}

Cobalah online!

Mengambil P sebagai sukses ( 0.1= 10% benar)

TFeld
sumber
0

05AB1E , 19 16 15 byte

Mengambil tingkat keberhasilan dalam bentuk 0.31(artinya 31% berhasil).

{γD€gDO/IαWQϘÙ

Cobalah online!

Emigna
sumber
Saya tidak yakin apakah perilaku ini benar.
Erik the Outgolfer
@EriktheOutgolfer: Diperbaiki: P
Emigna