Tarea
Dado (por cualquier medio) un conjunto de datos de punto flotante ordenado, devuelve (por cualquier medio y dentro de 1 ‰ del valor correcto) la media intercuartil .
Un posible algoritmo
- Deseche los trimestres más bajos y más altos de los puntos de datos.
- Calcule el promedio (suma dividida por conteo) de los puntos de datos restantes.
Nota: Si el tamaño del conjunto de datos no se puede dividir uniformemente en cuatro, deberá sopesar los puntos de datos que comparten los subconjuntos. Ver Ejemplo de evaluación 2 a continuación.
Ejemplo de evaluación 1
Dado {1, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 38}
- El recuento de datos es 12, por lo que eliminamos los 3 puntos de datos más bajos y más altos:
{1, 3, 4,5, 6, 6, 7, 7, 8,8, 9, 38} - Promedio de los 6 puntos de datos restantes:
(5 + 6 + 6 + 7 + 7 + 8) / 6 = 6.5
Ejemplo de evaluación 2
Dado {1, 3, 5, 7, 9, 11, 13, 15, 17}
- El recuento es 9, por lo que cada trimestre tiene 2¼ puntos de datos:
{1, 2, (0.25 × 5),(0.75 × 5), 7, 9, 11, (0.75 × 13),(0.25 × 13), 15, 17} - Promedio de los 4.5 puntos de datos restantes:
(0.75 × 5 + 7 + 9 + 11 + 0.75 × 13) / 4.5 = 9
Pyth ,
1110 bytesBanco de pruebas.
Cómo funciona
Cuadruplica la lista de entrada para garantizar que el recuento de datos sea divisible por 4.
Todavía necesita clasificación, porque se
*4
aplica a toda la lista en lugar de a cada elemento individual.Luego, divide la lista en cuatro partes iguales, luego quita la primera y la última parte.
La lista restante se aplana y se toma el promedio.
fuente
MATL ,
1211 bytesLa entrada es un vector horizontal, con el formato
o
Pruébalo en línea!
Explicación
fuente
6L)
elimina el primer y el último elemento? Cuando lo hago, empuja un montón de números complejos.[2, -1+i]
cuando se usa como índice significa2:end-1
Muñeco de nieve , 66 bytes
Pruébalo en línea!
Utiliza el mismo algoritmo que las respuestas de @LeakyNun .
fuente
Python 3, 50 bytes
Ideone it!
Cómo funciona
Es una traducción de mi respuesta en Pyth .
fuente
Jalea ,
141312 bytesPruébalo en línea!
Banco de pruebas.
Cómo funciona
Es una traducción de mi respuesta en Pyth .
fuente
Pyke,
1613 bytesPruébalo aquí!
fuente
Brachylog , 21 bytes
Pruébalo en línea! o verificar múltiples casos de prueba
Explicación
Esto es básicamente el algoritmo de respuesta Pyth de @ LeakyNun.
El único truco pequeño es multiplicar por el inverso de la longitud en lugar de dividir por la longitud, porque la división entre 2 enteros es la división de enteros.
fuente
Octava , 44 bytes
Esto define una función anónima.
La entrada es un vector horizontal.
Pruébalo con ideone .
Explicación
El vector horizontal de entrada se multiplica primero por la matriz (
*
) por un vector de columna de cuatro (construido con~~(1:4)'
). El resultado es una matriz de cuatro columnas donde cada fila es una copia del vector de entrada. Esto luego se reforma, manteniendo el orden lineal de los elementos, en una matriz de 4 columnas (reshape(...,[],4)
). Las dos columnas centrales se mantienen ((:,2:3)
) y se linealizan en una sola columna ((:)
), de la cual se calcula la media (mean(...)
).fuente
[x;x;x;x]
lugar de~~(1:4)'*x
@(x)mean([x;x;x;x](:)((b=numel(x))+1:3*b))
También es 2 bytes menos. Por eso se me ocurrió, pero es básicamente lo mismo que tu enfoque.J ,
2018 bytes2 bytes gracias a @miles
Pruébalo en línea! ( Intérprete en línea )
Uso
Cómo funciona
Es una traducción de mi respuesta en Pyth .
fuente
-@#(+/%#)@}.#}.4#]
de 18 bytes .En realidad ,
201513 bytesPruébalo en línea!
Cómo funciona
Es una traducción de mi respuesta en Pyth .
fuente
Octava, 42bytes
Otra función anónima para Octave.
Puedes probarlo en línea . Simplemente ingrese ese comando, y luego haga
ans([1 2 4 5 6 9])
o los números que sean necesarios.Este comienza creando a partir del conjunto de entrada uno con 4 de cada elemento de entrada concatenando primero cuatro copias verticalmente y luego aplanándolo verticalmente. Esto mantiene el orden de clasificación.
Luego se extrae el rango de elementos de la longitud de la matriz de entrada más 1 hasta tres veces la longitud de la matriz de entrada. Debido a que la nueva matriz es cuatro veces más larga, esto corta los cuartiles superior e inferior.
Finalmente se devuelve la media de la nueva matriz.
fuente
05AB1E, 15 bytes
Explicación
Pruébalo en línea
fuente
APL (Dyalog) , 15 bytes
Pruébalo en línea!
4∘/
cuadruplicar cada elemento-∘≢↓
descartar tantos elementos finales como elementos hay en los argumentos≢↓
descartar tantos elementos principales como elementos haya en el argumento(
...)
aplique la siguiente función tácita:+/
la suma÷
dividido por≢
el recuentofuente
JavaScript (ES6), 75 bytes
Utiliza el obvio enfoque de cuadruplicar y ordenar, y puedo usarlo
reduce
, lo cual es bueno. El único truco aquí es guardar 4 bytes reutilizando el comparador de clasificación para restar todos los elementos de la matriz de cero, lo que me da-2l
la respuesta que quiero.fuente
Golfscript,
2829 bytesPruébalo en línea!
fuente
En realidad, 12 bytes
Pruébalo en línea! (actualmente no funciona porque TIO tiene algunas versiones detrás)
Explicación:
fuente
Mathematica, 51 bytes
Ordena cuatro copias de la lista (para evitar problemas con la longitud de la lista, no múltiplos de cuatro), participa
"1 quarter the length of resulting list plus 1"
en el"1/4 length list + 1 from the end"
, toma suMean
.fuente
Java
146126BytesTal java mucho detallado!
Mayores Ungolfed parcialmente legible con casos de prueba
fuente
Clojure,
8281 bytesEditar: 1 byte menos reescribiendo la parte "didvide by 2 n".
Anterior:
Se utiliza
for
para generar 4 valores repetidos, utilizando flotante2.0
para no tener resultados fraccionarios, el resto es simplemente estándar.fuente
R,
1711 bytesSuponiendo
n
es el vector de entrada en la forma R estándarn=c(1, 2, 3, ...)
.Esto no es de ninguna manera sorprendente ya que R puede considerarse "EL lenguaje para la computación estadística" y tiene muchas características estadísticas integradas.
ACTUALIZAR. ¡Guardado 6 bytes gracias a rturnbull porque
trim
es el primer argumento opcional por defecto!Casos de prueba:
fuente
trim
es el segundo argumento predeterminado, no necesita nombrarlo;0.25
se puede acortar a.25
o1/4
. Esto te ahorra seis bytes.Excel, 17 bytes
El formato de entrada relajado lo hace fácil. Ingrese uno por fila en la Columna A.
fuente