Tarefa
Dado (por qualquer meio) um conjunto de dados de ponto flutuante classificado, retorne (por qualquer meio e dentro de 1 ‰ do valor correto) a média interquartil .
Um algoritmo possível
- Descarte os trimestres mais baixos e mais altos dos pontos de dados.
- Calcule a média (soma dividida pela contagem) dos pontos de dados restantes.
Nota: Se o tamanho do conjunto de dados não puder ser dividido em quatro, você precisará pesar os pontos de dados compartilhados por subconjuntos. Veja Exemplo de avaliação 2 abaixo.
Exemplo de avaliação 1
Dado {1, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 38}
- A contagem de dados é 12, portanto, removemos os 3 pontos de dados mais alto e mais baixo:
{1, 3, 4,5, 6, 6, 7, 7, 8,8, 9, 38} - Média dos 6 pontos de dados restantes:
(5 + 6 + 6 + 7 + 7 + 8) / 6 = 6,5
Exemplo de avaliação 2
Dado {1, 3, 5, 7, 9, 11, 13, 15, 17}
- A contagem é 9, portanto, cada trimestre possui 2¼ pontos de dados:
{1, 2, (0,25 × 5),(0,75 × 5), 7, 9, 11, (0,75 × 13),(0,25 × 13), 15, 17} - Média dos 4,5 pontos de dados restantes:
(0,75 × 5 + 7 + 9 + 11 + 0,75 × 13) / 4,5 = 9
Pitão ,
1110 bytesSuíte de teste.
Como funciona
Ele quadruplica a lista de entrada para garantir que a contagem de dados seja divisível por 4.
Ele ainda precisa ser classificado, porque
*4
se aplica a toda a lista, e não a cada elemento individual.Em seguida, divide a lista em quatro partes iguais e retira a primeira e a última parte.
A lista restante é achatada e a média é obtida.
fonte
MATL ,
1211 bytesEntrada é um vetor horizontal, com o formato
ou
Experimente online!
Explicação
fonte
6L)
remove o primeiro e o último elementos? Quando faço isso, gera um monte de números complexos.[2, -1+i]
quando usado como um índice significa2:end-1
Boneco de neve , 66 bytes
Experimente online!
Usa o mesmo algoritmo que as respostas de @LeakyNun .
fonte
Python 3, 50 bytes
Ideone it!
Como funciona
É uma tradução da minha resposta em Pyth .
fonte
Geléia ,
141312 bytesExperimente online!
Suíte de teste.
Como funciona
É uma tradução da minha resposta em Pyth .
fonte
Pyke,
1613 bytesExperimente aqui!
fonte
Braquilog , 21 bytes
Experimente online! ou verificar vários casos de teste
Explicação
Este é basicamente o algoritmo de resposta Pyth do @ LeakyNun.
O único pequeno truque é multiplicar pelo inverso do comprimento, em vez de dividir pelo comprimento, porque a divisão entre 2 números inteiros é a divisão inteira.
fonte
Oitava , 44 bytes
Isso define uma função anônima.
A entrada é um vetor horizontal.
Experimente em ideone .
Explicação
O vetor horizontal de entrada é primeiro multiplicado
*
por matriz ( ) por um vetor de coluna de quatro um (construído com~~(1:4)'
). O resultado é uma matriz de quatro colunas em que cada linha é uma cópia do vetor de entrada. Isso é reconfigurado, mantendo a ordem linear dos elementos, em uma matriz de 4 colunas (reshape(...,[],4)
). As duas colunas centrais são mantidas ((:,2:3)
) e linearizadas em uma única coluna ((:)
), cuja média é calculada (mean(...)
).fonte
[x;x;x;x]
, em vez de~~(1:4)'*x
@(x)mean([x;x;x;x](:)((b=numel(x))+1:3*b))
também é 2 bytes a menos. Foi por isso que eu criei, mas é basicamente o mesmo que a sua abordagem.J ,
2018 bytes2 bytes graças a @miles
Experimente online! ( Intérprete online )
Uso
Como funciona
É uma tradução da minha resposta em Pyth .
fonte
-@#(+/%#)@}.#}.4#]
por 18 bytes .Na verdade ,
201513 bytesExperimente online!
Como funciona
É uma tradução da minha resposta em Pyth .
fonte
Oitava, 42 bytes
Outra função anônima para o Octave.
Você pode experimentá-lo online . Basta digitar esse comando e, em seguida, faça
ans([1 2 4 5 6 9])
ou quaisquer números necessários.Este começa criando da matriz de entrada uma com 4 de cada elemento de entrada, concatenando primeiro quatro cópias na vertical e depois achatando-a na vertical. Isso mantém a ordem de classificação.
Então é extrai o intervalo de elementos do comprimento da matriz de entrada mais 1 a três vezes o comprimento da matriz de entrada. Como a nova matriz é quatro vezes maior, isso corta os quartis superior e inferior.
Finalmente, a média da nova matriz é retornada.
fonte
05AB1E, 15 bytes
Explicação
Experimente online
fonte
APL (Dyalog) , 15 bytes
Experimente online!
4∘/
quadruplicar cada elemento-∘≢↓
soltar tantos elementos finais quanto os elementos nos argumentos≢↓
elimine tantos elementos iniciais quanto o elemento no argumento(
…)
Aplique a seguinte função tácita:+/
a soma÷
dividido por≢
a contagemfonte
JavaScript (ES6), 75 bytes
Usa a abordagem óbvia de quadruplicar e classificar, e eu uso
reduce
, o que é legal. O único truque aqui é salvar 4 bytes reutilizando o comparador de classificação para subtrair todos os elementos da matriz de zero, o que me dá-2l
a resposta que eu quero.fonte
Golfscript,
2829 bytesExperimente online!
fonte
Na verdade, 12 bytes
Experimente online! (atualmente não funciona porque o TIO está algumas versões atrasado)
Explicação:
fonte
Mathematica, 51 bytes
Classifica quatro cópias da lista (para evitar problemas com o comprimento da lista e não múltiplos de quatro), participa
"1 quarter the length of resulting list plus 1"
dos"1/4 length list + 1 from the end"
, leva os seusMean
.fonte
Java
146126 bytesTal java muito detalhado!
Ungolfed mais antigo, parcialmente legível com casos de teste
fonte
Clojure,
8281 bytesEditar: 1 byte a menos reescrevendo a parte "didvide by 2 n".
Anterior:
Usa
for
para gerar 4 valores repetidos, usando float2.0
para não ter resultados fracionários, o resto é apenas padrão.fonte
R,
1711 bytesSupondo que
n
é o vetor de entrada no formulário R padrãon=c(1, 2, 3, ...)
.Isso não é de surpreender, já que R pode ser considerado "A linguagem para computação estatística" e possui muitos recursos estatísticos.
ATUALIZAR. Economizou 6 bytes graças ao rturnbull porque
trim
é o primeiro argumento opcional por padrão!Casos de teste:
fonte
trim
é o segundo argumento padrão, você não precisa nomeá-lo;0.25
pode ser reduzido para.25
ou1/4
. Isso economiza seis bytes.Excel, 17 bytes
O formato de entrada relaxado facilita isso. Insira um por linha na coluna A.
fonte