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 wins
y 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!
1
paraN > M
,0
paraN = M
,-1
paraN < M
.Explicación:
fuente
Mathematica, 15 bytes
Pruébalo en línea!
Function
que 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-1
si la primera lista gana,0
si hay un empate y1
si 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,
a
se inicializa como el promedio de laN
matriz:M
tiene 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
M
porN
.En esta segunda llamada a la función,
a
se inicializa como el promedio deN
–– que estabaM
en 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
A
a los parámetros de la función?Mathematica, 21 bytes
1 para
#
victorias, -1 para#2
victorias, 0 para empate.fuente
Sign[#-#2&@@Mean/@#]&
MATL , 8 bytes
Tantos modificadores (
Y
yZ
). No puedo encontrar una manera de hacerlo más corto.sum / number_of_elements
son tres bytes Puede ser una mejor manera de hacerlo-ZS
, pero no puedo encontrar una.Pruébalo en línea!
Devuelve
1
si la primera entrada es más grande,0
si están vinculadas y-1
si la segunda entrada es más grande.fuente
05AB1E , 9 bytes
1 si
M
gana, -1 siN
gana y 0 por empate.Pruébalo en línea!
Explicación
fuente
Julia , 27 bytes
Pruébalo en línea!
Devuelve
1
si el primer promedio es mayor,-1
si el segundo es, y0
si empatan.fuente
Python 2 , 43 bytes
Pruébalo en línea!
fuente
Octava , 27 bytes
Pruébalo en línea!
Toma dos vectores
x.y
como entrada, toma losmean
dos vectores y resta uno del otro. Obtener el signo de esto, para conseguir1
,0
y-1
para 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
1
si la izquierda tiene un promedio más alto, 0 si tienen el mismo promedio y¯1
si 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]:0
por 61 bytes. Toma entrada como una matriz de matrices, y salidas0
para un empate,true
para M yfalse
para 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
GT
si gana el primer argumento,LT
si gana el segundo argumento yEQ
si empatan.Pruébalo en línea!
fuente
sum$x
conf.
. También:length x
puede sustituirse porsum[1|_<-x]
, por lo que puede deshacerse fueraf
por 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-1
siN < M
,1
siN > M
y0
si son iguales.Pruébalo en línea
fuente
h.+
con-F
TI-Basic,
2521131210 bytes-2 bytes gracias a lirtosiast
fuente
Ans
lugar 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,M
que 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
,1
o0
).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
1
si la primera lista tiene un promedio mayor,-1
si la segunda tiene, y0
si los promedios son iguales.fuente
JavaScript (ES6), 60 bytes
Salidas
0
paraTie
,true
paraN
yfalse
paraM
.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
, ofalse
paraN
,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
. Salidas0
paraTie
,true
paraN
yfalse
paraM
.x-y&&x>y
¿quizás?Pip , 13 bytes
Esta es una función que toma una lista de listas. Devuelve
1
si el primer promedio es mayor,-1
si el segundo es mayor,0
si 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] * 5
da[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
.#*a
Asigne
#
el argumento de la función, obteniendo las longitudes de las sublistas. Resultado:[3 4]
a/#*a
Divida (los elementos de) las sublistas de
a
por sus respectivas longitudes. Resultado:[[0.667 1 1.333] [0.5 0.75 1 1.5]]
$+*a/#*a
Asigne
$+
(doble al agregar) a ese resultado, sumando las sublistas. Resultado:[3 3.75]
$CM$+*a/#*a
Doblar
CM
, lo que da-1
,0
o1
dependiendo de la comparación de sus dos operandos (como el de Pythoncmp
). Resultado:-1
(porque3
es 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<N
respectivamente. Toma de entrada comolength of M
,length of N
,M
,N
.fuente
Brachylog , 8 bytes
Pruébalo en línea!
Salidas
1
si la primera lista tiene un promedio mayor, si-1
la segunda lista tiene un promedio mayor y0
si 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.
1
si la primera lista es más grande,-1
si la segunda lista es más grande,0
para un empate.fuente
Stream
s 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
IntStream
s como entrada. Puede obtener dicha entrada de un estándarint[]
conArrays.stream(array)
.La salida es
1
para "N victorias",-1
para "M victorias" y0
para 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
1
si la izquierda es mayor,¯1
si la derecha está y0
en 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