(um paradoxo, um paradoxo, um paradoxo mais engenhoso)
Esta é a primeira parte de uma série multipartes inspirada em diferentes funções R.
A tarefa
Dado um conjunto de dados de inteiros positivos, eu preciso de você para calcular o resumo 5 Número de . No entanto, estou trabalhando em grandes conjuntos de dados, portanto, preciso que seu código seja o menor possível, permitindo que eu o armazene no meu computador.
O resumo de cinco números consiste em:
- Valor mínimo
- Primeiro quartil (Q1)
- Mediana / Segundo quartil (Q2)
- Terceiro quartil (Q3)
- Valor máximo
Existem várias maneiras diferentes de definir os quartis, mas usaremos o implementado por R:
Definições:
- Mínimo e máximo: os menores e os maiores valores, respectivamente.
- Mediana: o valor do meio, se tiver um número ímpar de entradas, e a média aritmética dos dois valores mais médios, se tiver um número par de entradas. Observe que isso significa que a mediana pode ser um valor não inteiro. Nós tivemos que calcular a mediana antes .
- Primeiro e Terceiro Quartis: Divida os dados em duas metades, incluindo o elemento central em cada metade, se tiver um número ímpar de entradas, e encontre o valor mediano de cada metade. A mediana da metade inferior é o Primeiro Quartil, e a mediana da metade superior é o Terceiro Quartil.
Exemplos:
. A mediana é então , e a metade inferior é , produzindo um primeiro quartil de , e a metade superior é , produzindo um terceiro quartil de .
. A mediana é e a metade inferior é , produzindo um primeiro quartil de , e a metade superior é , produzindo um terceiro quartil de .
Regras adicionais:
- A entrada é como uma matriz ou o equivalente mais próximo do seu idioma.
- Você pode assumir que a matriz está classificada em ordem crescente ou decrescente (mas especifique qual).
- Você pode devolver / imprimir os resultados em qualquer ordem consistente e no formato flexível que desejar, mas indique o pedido e o formato na sua resposta.
- Funções internas equivalentes a
fivenum
são permitidas, mas também implemente sua própria solução. - Você não pode assumir que cada um dos cinco números será um número inteiro.
- As explicações são incentivadas.
- Isso é código-golfe , e a resposta mais curta em cada idioma vence!
Casos de teste gerados aleatoriamente
1 1 1 1 1 2 2 2 2 2 3 3 4 4 4 4 4 5 5 5 -> 1 1.5 2.5 4 5
1 2 2 2 4 4 5 5 6 7 7 8 9 9 9 9 9 10 10 10 -> 1 4 7 9 10
2 2 2 6 8 10 15 16 21 22 23 24 26 33 35 38 38 45 46 47 48 -> 2 10 23 38 48
1 2 9 -> 1 1.5 2 5.5 9
1 2 3 3 3 4 9 -> 1 2.5 3 3.5 9
1 1 2 5 7 7 8 8 15 16 18 24 24 26 26 27 27 28 28 28 29 29 39 39 40 45 46 48 48 48 48 49 50 52 60 63 72 73 79 85 86 87 88 90 91 93 94 95 95 97 100 -> 1 25 45 76 100
2 2 4 4 6 8 10 11 13 14 14 15 17 21 23 24 26 27 27 28 28 30 31 33 33 34 36 36 38 38 39 40 41 42 42 43 45 45 47 47 47 47 47 48 48 48 50 51 53 53 55 56 56 56 57 57 58 62 62 63 64 64 65 65 66 67 67 67 68 69 69 71 71 71 74 79 80 81 81 81 82 82 83 83 86 86 86 87 89 94 94 94 95 95 97 98 99 100 100 100 -> 2 33.5 54 76.5 100
1 3 3 4 -> 1 2 3 3.5 4
1 3 3 3 4 -> 1 3 3 3 4
fonte
quantile
retorna um vetor nomeado, enquantofivenum
não tem nome. Talvez seja um problema a jusante de ondefivenum
é usado?unname()
resolveria isso. Talvez haja razões históricas?fivenum
entradas de comprimento 3 mod 4, incluindo dois dos casos de teste.MATL , 18 bytes
A ordem de saída está aumentando, como nos casos de teste.
Experimente online! Ou verifique todos os casos de teste .
Explicação
MATL, como MATLAB, calcula quantis usando interpolação linear, se necessário (exatamente como especificado no desafio para a mediana). Para obter o comportamento necessário para o primeiro e o terceiro quartis, basta repetir a mediana se o comprimento da entrada for ímpar. Então os resultados são apenas os quantis 0, 0,25, 0,5, 0,75 e 1.
fonte
Gelatina , 13 bytes
Experimente online!
Ordem:
[Q1, Q3, Q2/med, min, max]
.fonte
Python 3.8 (pré-lançamento) , 66 bytes
Experimente online!
Entrada e saída estão em ordem crescente.
fonte
Python 3.8, 97 bytes
Isso pressupõe que a lista de entrada seja classificada em ordem crescente.
f
é a função para retornar o resumo de 5 números.Tirei alguns bytes tomando algumas dicas da resposta do FlipTack para Calcular a mediana.
Experimente online!
Como funciona?
fonte
Carvão , 33 bytes
Experimente online! Link é a versão detalhada do código. Saídas em ordem crescente ou decrescente, dependendo de a entrada estar em ordem crescente ou decrescente. Explicação:
Obtenha o índice do último elemento.
Mapeie os elementos da matriz a seguir e converta o resultado em string para impressão implícita em linhas separadas.
Calcule as posições dos elementos do quartil, em que um extra
0.5
indica que o valor é a média de dois elementos adjacentes.Calcule o quartil em cada posição, calculando a média dos valores no piso e no teto da posição.
fonte
Ruby 2.7-preview1 , 59 bytes
Uma porta de
ripoffdireta da resposta Python do xnor .Experimente online! (um byte a mais, já que o TiO está usando o Ruby 2.5 e não possui parâmetros de bloco numerados, por exemplo
@1
).fonte
C (gcc) ,
123121119 bytes-2 graças a ceilingcat.
Assume uma lista classificada em ordem crescente.
Saídas em ordem: min, Q1, Q2, Q3, máx.
Experimente online!
fonte
05AB1E , 18 bytes
Saída de ordem é:
[Q1, Q3, Q2, min, max]
.Experimente online ou verifique todos os casos de teste . Adicionei uma classificação
{
para o conjunto de testes, para que os casos de teste sejam mais fáceis de verificar na ordem[min, Q1, Q2, Q3, max]
.)Explicação:
fonte