90% falham neste desafio?

8

Acho que não sou o único que viu esse tipo de imagem no Facebook (e em outros sites).

Resolvê-lo !!!!

A imagem acima foi publicada há 16 dias e acumulou 51 k comentários. Algumas respostas: 0, 4, 8, 48, 88, 120, 124 e assim por diante.

Desafio:

A matemática da pergunta não faz sentido 1 , então não podemos encontrar a resposta correta olhando para a equação (ou o que você chamaria de confusão de números e operadores). No entanto, há um número muito grande de pessoas que responderam e 10% delas estão certas!

Vamos encontrar a resposta certa!


Pegue um número inteiro, porcentagem, valor decimal 0-1ou fração Nrepresentando quantos por cento do grupo de teste que falhou na pergunta (ou, opcionalmente, quantos responderam corretamente) e uma lista de números representando as respostas que as pessoas postam.

Encontre o número que a 100-Nporcentagem do grupo de teste respondeu e faça a saída. Se houver mais de uma resposta que corresponda a esse critério, você deverá gerar todas elas. Se não houver respostas representadas 100-Npor cento do tempo, você deve gerar o número mais próximo (medido no número de respostas 100-N).

Para tornar as regras de entrada para Nclara: se 90% falhar, então você pode introduzir 90, 10, 0.9ou 0.1. Você deve especificar qual você escolher. Você pode assumir que os números percentuais são números inteiros.


Casos de teste:

Nos casos de teste abaixo, Né a porcentagem que falhou no teste. Você pode optar por inserir usando qualquer um dos métodos de entrada permitidos.

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 Por favor, não discuta comigo aqui. Se você "souber" a resposta , junte-se aos outros 10% e publique no Facebook!

Stewie Griffin
fonte
Sandbox .
Stewie Griffin
Qual será o número máximo de itens na lista, se houver?
Kevin Cruijssen
1
@KevinCruijssen Você não pode assumir um valor máximo. O máximo é determinado pelo tipo de memória / tipo de dados. O desafio é baseado em uma postagem com 51 mil comentários, portanto deve cobrir, de preferência, pelo menos muitos itens.
Stewie Griffin
1
O que devemos fazer se mais de uma resposta for igualmente próxima, como no exemplo [1,3,3,3], 0.5? Precisamos produzir os dois nesse caso?
Emigna
@ Emigna sim, saída ambos. Veja o quarto caso de teste.
Stewie Griffin

Respostas:

6

MATL , 16 14 bytes

-1 byte graças a @ Giuseppe

-1 byte graças a @LuisMendo

SY'ts/i-|tX<=)

Explicação:

        % 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

Experimente online! ou verifique todos os casos de teste

Cinaski
fonte
4

R , 65 bytes

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

Experimente online!

Toma Ncomo um número entre 0e 1, e Acomo um vetor (às vezes retirado de STDIN no link TIO, para que não seja necessário transformá-los em vetores R). Retorna uma lista de cadeias, conforme permitido pelo 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
fonte
1

JavaScript (ES7), 103 99 bytes

É inserido como (a, r)onde a é a lista de respostas er é a taxa de sucesso esperada em [0 ... 1] . Retorna 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

Casos de teste

Arnauld
fonte
0

Python 2 , 91 bytes

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]}

Experimente online!

Toma P como sucesso ( 0.1= 10% correto)

TFeld
fonte
0

05AB1E , 19 16 15 bytes

Assume a taxa de sucesso no formulário 0.31(o que significa 31% de êxito).

{γD€gDO/IαWQϘÙ

Experimente online!

Emigna
fonte
Não tenho certeza se o comportamento para isso está correto.
Erik the Outgolfer
@EriktheOutgolfer: Fixed: P
Emigna 3/17/17