(una paradoja, una paradoja, una paradoja muy ingeniosa)
Esta es la primera parte de una serie de varias partes inspirada en diferentes funciones de R.
La tarea
Dado un conjunto de datos de números enteros positivos, necesito que permite calcular el resumen 5 Número de . Sin embargo, estoy trabajando en grandes conjuntos de datos, por lo que necesito que su código sea lo más pequeño posible, lo que me permite almacenarlo en mi computadora.
El resumen de cinco números consiste en:
- Valor mínimo
- Primer cuartil (Q1)
- Mediana / segundo cuartil (Q2)
- Tercer cuartil (Q3)
- Valor máximo
Hay varias formas diferentes de definir los cuartiles, pero utilizaremos la implementada por R:
Definiciones:
- Mínimo y máximo: los valores más pequeños y más grandes, respectivamente.
- Mediana: el valor medio si tiene un número impar de entradas, y la media aritmética de los dos valores más medios si tiene un número par de entradas. Tenga en cuenta que esto significa que la mediana puede ser un valor no entero. Hemos tenido que calcular la mediana antes .
- Primer y tercer cuartiles: divida los datos en dos mitades, incluido el elemento central en cada mitad si tiene un número impar de entradas, y encuentre el valor medio de cada mitad. La mediana de la mitad inferior es el primer cuartil, y la mediana de la mitad superior es el tercer cuartil.
Ejemplos:
. La mediana es entonces , y la mitad inferior es , produciendo un primer cuartil de , y la mitad superior es , produciendo un tercer cuartil de .
. La mediana es , y la mitad inferior es , produciendo un primer cuartil de , y la mitad superior es , produciendo un tercer cuartil de .
Reglas adicionales:
- La entrada es como una matriz o el equivalente más cercano a su idioma.
- Puede suponer que la matriz está ordenada en orden ascendente o descendente (pero especifique cuál).
- Puede devolver / imprimir los resultados de manera consistente orden y en el formato flexible que desee, pero indique el orden y el formato en su respuesta.
- Funciones incorporadas equivalentes a
fivenum
Se permiten , pero también implemente su propia solución. - Puedes no asume cada uno de los cinco números será un entero.
- Se alientan las explicaciones.
- Este es el código de golf , por lo que gana la respuesta más corta en cada idioma.
Casos de prueba generados 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
fuente
quantile
devuelve un vector con nombre, mientrasfivenum
que no tiene nombre. ¿Quizás sea un problema aguas abajo de dóndefivenum
se usa?unname()
resolvería eso. Tal vez hay razones históricas?fivenum
entradas de longitud 3 mod 4, incluidos dos de los casos de prueba.MATL , 18 bytes
El orden de salida está aumentando, como en los casos de prueba.
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
MATL, como MATLAB, calcula cuantiles usando interpolación lineal si es necesario (tal como se especifica en el desafío para la mediana). Para lograr el comportamiento requerido para el primer y tercer cuartiles, es suficiente repetir la mediana si la longitud de la entrada es impar. Entonces los resultados son solo los cuantiles 0, .25, .5, .75 y 1.
fuente
Jalea , 13 bytes
Pruébalo en línea!
Orden:
[Q1, Q3, Q2/med, min, max]
.fuente
Python 3.8 (prelanzamiento) , 66 bytes
Pruébalo en línea!
La entrada y la salida están en orden ascendente.
fuente
Python 3.8, 97 bytes
Esto supone que la lista de entrada está ordenada en orden ascendente.
f
es la función para devolver el resumen de 5 números.Saqué algunos bytes tomando algunas pistas de la respuesta de FlipTack a Compute the Median.
Pruébalo en línea!
¿Como funciona?
fuente
Carbón , 33 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Salidas en orden ascendente o descendente dependiendo de si la entrada está en orden ascendente o descendente. Explicación:
Obtenga el índice del último elemento.
Asigne los elementos de la siguiente matriz y convierta el resultado en una cadena para impresión implícita en líneas separadas.
Calcule las posiciones de los elementos del cuartil, donde un extra
0.5
indica que el valor es el promedio de dos elementos adyacentes.Calcule el cuartil en cada posición tomando el promedio de los valores en el piso y el techo de la posición.
fuente
Ruby 2.7-preview1 , 59 bytes
Un puerto de
estafadirecta de la respuesta Python de xnor .Pruébalo en línea! (un byte más, ya que TiO está usando Ruby 2.5 y no tiene parámetros de bloque numerados, por ejemplo
@1
).fuente
C (gcc) ,
123121119 bytes-2 gracias a ceilingcat.
Asume una lista ordenada en orden ascendente.
Salidas en orden: mín., Q1, Q2, Q3, máx.
Pruébalo en línea!
fuente
05AB1E , 18 bytes
Salida de orden es:
[Q1, Q3, Q2, min, max]
.Pruébelo en línea o verifique todos los casos de prueba . (He agregado un tipo
{
para el conjunto de pruebas, por lo que los casos de prueba son más fáciles de verificar en el orden[min, Q1, Q2, Q3, max]
).Explicación:
fuente