Obtener el promedio de una lista (p [2,6,7]. Ej. )
- Obtenga la longitud de la lista:
[2,6,7] -> 3 - Sumar los números de la lista:
2 + 6 + 7 = 15. - Dividir la suma por su cuenta:
15 / 3 = 5.
Debe comparar los promedios de dos listas de enteros positivos N y M , devolviendo un valor si N tiene un promedio más alto, otro valor si M tiene un promedio más alto y otro en caso de empate.
Reglas de E / S
Todos los métodos de entrada y salida estándar están permitidos.
Entrada
Puede tomar la entrada como dos listas separadas, una lista anidada o cualquier otra cosa que considere adecuada para la tarea. Por favor especifique el formato.
Salida
Los valores proporcionados deben ser distintos y deben constar de al menos un carácter que no sea un espacio en blanco. Además, deben ser consistentes entre ejecuciones (un valor único para N , un valor único para M , un valor único para Tie ). Por favor especifique aquellos en su respuesta. Los valores pueden ser cadenas no vacías, valores de bool, enteros o cualquier cosa que considere adecuada.
Especificaciones
Las listas no necesariamente tendrán la misma longitud.
Le garantizamos que las listas no están vacías.
Casos de prueba
Elegí los valores N wins, M winsy Tie, que son más o menos evidente.
N, M -> Salida (promedios) [7], [6] -> N gana (N tiene 7, M tiene 6) [4,5], [4,4] -> N gana (N tiene 4.5, M tiene 4) [2,3,4], [4,5,6] -> M gana (N tiene 3, M tiene 5) [4,1,3], [7,3,2,1,1,2] -> Empate (ambos tienen 2.666 ...) [100,390,1], [89,82,89] -> N gana (N tiene 163.666 ..., M tiene 86.666 ...) [92,892], [892,92] -> Empate (las listas son básicamente idénticas) [10,182], [12,78,203,91] -> Empate (ambos tienen 96)
Se aplican las lagunas predeterminadas . ¡Se alientan las explicaciones! Este es el código de golf , por lo que gana el código más corto en bytes.
fuente

Respuestas:
En realidad , 5 bytes
Pruébalo en línea!
1paraN > M,0paraN = M,-1paraN < M.Explicación:
fuente
Mathematica, 15 bytes
Pruébalo en línea!
Functionque espera una lista de dos listas.Mean/@#toma la media aritmética de cada lista en la entrada, luego se pasan esas mediasOrder, que regresa-1si la primera lista gana,0si hay un empate y1si la segunda lista gana.fuente
JavaScript (ES6),
5250 bytes(Guardado 2 bytes gracias a @Shaggy.)
Aquí hay dos soluciones de 50 bytes:
Devuelve Infinito para N, -Infinito para M y NaN para un empate.
La primera solución puede requerir un poco de explicación debido a la recursividad:
En la primera llamada a la función,
ase inicializa como el promedio de laNmatriz:Mtiene un valor en este punto, por lo que la primera parte de la expresión condicional se llama:M ? (a-f(M))/0 : a ----------La función se llama dentro de esta expresión, esta vez sustituyendo
MporN.En esta segunda llamada a la función,
ase inicializa como el promedio deN–– que estabaMen la llamada anterior.Como no hay un segundo parámetro durante esta llamada a la función, se activa la segunda parte de la expresión condicional, que devuelve el promedio:
M ? (a-f(M))/0 : a --Ahora podemos entender mejor la expresión:
Sus:
La diferencia entre los promedios será un número positivo, un número negativo o 0.
Dividir la diferencia por 0 da como resultado Infinito , -Infinito o NaN , proporcionando los tres valores distintos según sea necesario.
Casos de prueba:
Mostrar fragmento de código
fuente
Aa los parámetros de la función?Mathematica, 21 bytes
1 para
#victorias, -1 para#2victorias, 0 para empate.fuente
Sign[#-#2&@@Mean/@#]&MATL , 8 bytes
Tantos modificadores (
YyZ). No puedo encontrar una manera de hacerlo más corto.sum / number_of_elementsson tres bytes Puede ser una mejor manera de hacerlo-ZS, pero no puedo encontrar una.Pruébalo en línea!
Devuelve
1si la primera entrada es más grande,0si están vinculadas y-1si la segunda entrada es más grande.fuente
05AB1E , 9 bytes
1 si
Mgana, -1 siNgana y 0 por empate.Pruébalo en línea!
Explicación
fuente
Julia , 27 bytes
Pruébalo en línea!
Devuelve
1si el primer promedio es mayor,-1si el segundo es, y0si empatan.fuente
Python 2 , 43 bytes
Pruébalo en línea!
fuente
Octava , 27 bytes
Pruébalo en línea!
Toma dos vectores
x.ycomo entrada, toma losmeandos vectores y resta uno del otro. Obtener el signo de esto, para conseguir1,0y-1para las tres alternativas diferentes.fuente
Python 2, 49 bytes
Pruébalo en línea
fuente
APL (Dyalog) , 11 bytes
Solicita una lista de dos listas. Imprime
1si la izquierda tiene un promedio más alto, 0 si tienen el mismo promedio y¯1si la derecha tiene un promedio más alto.Pruébalo en línea!
⎕rápido(…)¨Aplique la siguiente función tácita a cada uno:+/la suma÷dividido por≢el recuento-/inserte (y evalúe) un signo menos entre ellos×signumfuente
Javascript,
81665856 bytesahorró 15 bytes gracias a Luke
ahorró 2 bytes gracias a Justin Mariner
El empate es 0, M es 1 y N es -1. Llamado usando la sintaxis de curry, por ejemplo.
f([7])([6])fuente
eval(a.join`+`).a=>(b=a.map(c=>eval(c.join`+`)/c.length))[0]-b[1]?b[0]>b[1]:0por 61 bytes. Toma entrada como una matriz de matrices, y salidas0para un empate,truepara M yfalsepara N.a) la primera vez que se usa:n=>m=>Math.sign((a=b=>eval(b.join`+`)/b.length)(m)-a(n)).PHP , 68 bytes
Pruébalo en línea!
PHP , 69 bytes
Pruébalo en línea!
operador de nave espacial -1 menos que, 0 empate, 1 mayor que
fuente
Haskell,
6543 BytesGuardado 22 bytes gracias a nimi!
Tiene que haber una manera mucho mejor ... Pero las conversiones de tipos me fastidiaron.Uso
Devuelve
GTsi gana el primer argumento,LTsi gana el segundo argumento yEQsi empatan.Pruébalo en línea!
fuente
sum$xconf.. También:length xpuede sustituirse porsum[1|_<-x], por lo que puede deshacerse fuerafpor completo:a x=sum x/sum[1|_<-x].#:...(a x)$a y.(.a).compare.a. Uso:( (.a).compare.a ) [7] [6].[1|_<-x]es lo mismo que(1<$x).J, 10 bytes
Una lista dada a la izquierda, otra a la derecha. Devuelve _1 si el promedio izquierdo es menor, 1 si es mayor y 0 si son iguales
(+/%#)es una bifurcación J estándar para calcular el promedio de una lista&Proporciona una variación de la horquilla diádica. aplica el lado derecho (el verbo promedio, en este caso) a ambos argumentos, y luego los pasa al verbo del lado izquierdo, que en este caso es ...*@-restar seguido de "signo de": entonces el promedio de la derecha se resta de la izquierda, y se nos da el signo del resultado: _1, 1 o 0fuente
Pyth,
10876 bytesGracias @isaacg por guardar un byte
De entrada se toma como una lista anidada,
[N, M]. Salidas-1siN < M,1siN > My0si son iguales.Pruébalo en línea
fuente
h.+con-FTI-Basic,
2521131210 bytes-2 bytes gracias a lirtosiast
fuente
Anslugar deC:mean(L₁)>mean(L₂:Ans+3(mean(L₁)=mean(L₂21 bytes.(y el).Jalea , 7 bytes
Un enlace monádico que acepta una lista de las dos listas,
N,Mque devuelve:[-1]paraN;[1]paraM; y[0]por un empate.Como un completo programa imprime el resultado (listas única opción permite imprimir su contenido solamente, así que
-1,1o0).Pruébalo en línea!
¿Cómo?
fuente
S÷L, y luego la convierte en un enlace único a través delS÷¥L$cual se puede acortarS÷Lµya que está en el al comienzo del programa y luego pones un€derecho allí para mapear y luego, ya que no hay nada incorporado para comparar que usarías,_/Ṡpero puedes acortarloIṠya que todavía hay 3 salidas cmp distintas ... sí, estoy bastante seguro de que no puede ser hecho en 5. También 5 no ayudará desde que FGITW'd. :)Perl 6 , 25 bytes
Pruébalo en línea!
Toma un solo argumento, una lista de dos elementos de listas de números. Devuelve
1si la primera lista tiene un promedio mayor,-1si la segunda tiene, y0si los promedios son iguales.fuente
JavaScript (ES6), 60 bytes
Salidas
0paraTie,trueparaNyfalseparaM.fuente
JavaScript (ES6),
6054 bytes-6 bytes gracias a @Luke y @Neil
Toma la entrada como una matriz de 2 elementos
[N, M]. Salidastrue,0, ofalseparaN,Tie, oM, respectivamente.Explicación
Fragmento de prueba
Ingrese números separados por espacios / comas.
Mostrar fragmento de código
fuente
Math.sign(y-x)pory-x?x>y:0. Salidas0paraTie,trueparaNyfalseparaM.x-y&&x>y¿quizás?Pip , 13 bytes
Esta es una función que toma una lista de listas. Devuelve
1si el primer promedio es mayor,-1si el segundo es mayor,0si está empatado. Ejecute todos los casos de prueba aquí.Antecedentes
Esta solución hace un uso intensivo de dos de los metaoperadores de Pip:
$Doblar Tome un operador binario y aplíquelo entre los elementos de una lista. Por ejemplo,+es una suma, pero$+suma una lista. Tenga en cuenta que$convierte a un operador binario en un operador unario.*, mapa. Tome un operador unario y aplíquelo a cada elemento de una lista. Por ejemplo,#da la longitud de una lista, pero#*da (una lista de) las longitudes de los elementos de la lista.$+*mapas se pliegan / agregan sobre una lista, sumando cada uno de los elementos de la lista.La otra cosa que debe saber sobre Pip es que muchos operadores trabajan por elementos en las listas de forma predeterminada. Por ejemplo,
[1 2 3] * 5da[5 10 15];[1 2 3] * [2 3 4]da[2 6 12]; y[[1 2] [3 4]] * [5 6]da[[5 10] [18 24]].Explicación
Usaremos un ejemplo de entrada de
[[2 3 4] [2 3 4 6]]:{...}Define una función. El (primer) argumento está vinculado a la variable local
a.#*aAsigne
#el argumento de la función, obteniendo las longitudes de las sublistas. Resultado:[3 4]a/#*aDivida (los elementos de) las sublistas de
apor sus respectivas longitudes. Resultado:[[0.667 1 1.333] [0.5 0.75 1 1.5]]$+*a/#*aAsigne
$+(doble al agregar) a ese resultado, sumando las sublistas. Resultado:[3 3.75]$CM$+*a/#*aDoblar
CM, lo que da-1,0o1dependiendo de la comparación de sus dos operandos (como el de Pythoncmp). Resultado:-1(porque3es más pequeño que3.75).También puede definir funciones en Pip escribiendo expresiones que contengan la función de identidad
_. Por ejemplo,_*_es una función que cuadra su argumento: azúcar sintáctico para{a*a}, y menos bytes. Sin embargo, hay un error en la versión actual del intérprete que impide_trabajar con el*metaoperador. Una vez que se fija, esta solución puede ser 11 bytes :$CM$+*_/#*_.fuente
C (gcc), 91
98bytesLugar equivocado para C y probablemente la única respuesta que no necesita división. Al menos el código se muestra sin un control deslizante.
0,1,2 volver para
M>N,M=N,M<Nrespectivamente. Toma de entrada comolength of M,length of N,M,N.fuente
Brachylog , 8 bytes
Pruébalo en línea!
Salidas
1si la primera lista tiene un promedio mayor, si-1la segunda lista tiene un promedio mayor y0si están vinculadas.Explicación
fuente
Java, 105 bytes
Lambda que toma una lista anidada, según las entradas permitidas.
Transmite la lista de listas, convierte ambas a sus promedios y luego devuelve el signo de la diferencia.
1si la primera lista es más grande,-1si la segunda lista es más grande,0para un empate.fuente
Streams directamente, como lo hice .R
3834 bytesFunción que toma como entrada dos vectores numéricos. Devuelve 1 si el promedio de la primera lista es mayor, 0 si son iguales y -1 si el promedio de la segunda lista es mayor.
fuente
f=.{}del cuerpo de la función.MATL , 6 bytes
¡No seas tan malo! *
Orden de pila de entrada:
Salida:
Pruébalo en línea!
* Esta respuesta se jugó sin ser mala con ningún número pobre e indefenso.
fuente
Java (OpenJDK 8) ,
7662 bytesPruébalo en línea!
Como la entrada puede ser cualquier cosa, decidí tomar
IntStreams como entrada. Puede obtener dicha entrada de un estándarint[]conArrays.stream(array).La salida es
1para "N victorias",-1para "M victorias" y0para empate.Ahorra
fuente
java.util.Arrays.stream(array).map(java.util.Arrays::stream)). Es solo cuando releí la pregunta hoy que pensé que este formato de entrada es tan válido como cualquier otro..orElse(0)un acortamiento viable de.getAsDouble()?(a,b)->Math.signum(a.average().orElse(0)-b.average().orElse(0));son 64 bytesDyalog APL, 14 bytes
1si la izquierda es mayor,¯1si la derecha está y0en empate.¿Cómo?
¨∘⊢para cada lista+/÷≢calcular el promedio (+/suma÷dividida por≢longitud)-/restar los promedios×signo del resultadofuente
Lisp común ,
7471 bytesPruébalo en línea!
fuente