Obtendo a média de uma lista (por exemplo [2,6,7]
)
- Obtenha o comprimento da lista:
[2,6,7] -> 3
- Somar os números na lista:
2 + 6 + 7 = 15
. - Divida a soma por sua contagem:
15 / 3 = 5
.
Você deve comparar as médias de duas listas de números inteiros positivos N e M , retornando um valor se N tiver uma média mais alta, outro valor se M tiver uma média mais alta e outro em caso de empate.
Regras de E / S
Todos os métodos padrão de entrada e saída são permitidos.
Entrada
Você pode receber a entrada como duas listas separadas, uma lista aninhada ou qualquer outra coisa que considere adequada para a tarefa. Por favor, especifique o formato.
Resultado
Os valores fornecidos devem ser distintos e devem consistir em pelo menos um caractere que não seja um espaço em branco. Além disso, eles devem ser consistentes entre as execuções (um valor único para N , um valor único para M , um valor único para empate ). Especifique aqueles em sua resposta. Os valores podem ser Strings não vazios, valores Bool, Inteiros ou qualquer coisa que você considere adequado.
Especificações
As listas não terão necessariamente o mesmo comprimento.
Você está garantido que as listas não estão vazias.
Casos de teste
Eu escolhi os valores N wins
, M wins
e Tie
, que são bastante auto-evidente.
N, M -> Saída (médias) [7], [6] -> N vence (N tem 7, M tem 6) [4,5], [4,4] -> N vence (N tem 4,5, M tem 4) [2,3,4], [4,5,6] -> M vence (N tem 3, M tem 5) [4,1,3], [7,3,2,1,1,2] -> Empate (ambos têm 2,666 ...) [100.390,1], [89,82,89] -> N vitórias (N tem 163.666 ..., M tem 86.666 ...) [92.892], [892,92] -> Empate (as listas são basicamente idênticas) [10.182], [12,78.203,91] -> Empate (ambos têm 96)
Aplicam-se lacunas padrão . As explicações são incentivadas! Isso é código-golfe , então o código mais curto em bytes vence!
fonte
Respostas:
Na verdade , 5 bytes
Experimente online!
1
paraN > M
,0
paraN = M
,-1
paraN < M
.Explicação:
fonte
Mathematica, 15 bytes
Experimente online!
Function
que espera uma lista de duas listas.Mean/@#
assume a média aritmética de cada lista na entrada, então esses meios são passadosOrder
, o que retorna-1
se a primeira lista vencer,0
se houver um empate e1
se a segunda lista vencer.fonte
JavaScript (ES6),
5250 bytes(Economizou 2 bytes graças a @Shaggy.)
Aqui estão duas soluções de 50 bytes:
Retorna Infinito para N, -Infinito para M e NaN para um empate.
A primeira solução pode exigir um pouco de explicação devido à recursão:
Na primeira chamada para a função,
a
é inicializado como a média daN
matriz:M
tem um valor neste momento, portanto, a primeira parte da expressão condicional é chamada:M ? (a-f(M))/0 : a ----------
A função é chamada dentro desta expressão, desta vez substituindo
M
paraN
.Nesta segunda chamada para a função,
a
é inicializado como a média deN
–– que estavaM
na chamada anterior.Como não há segundo parâmetro durante esta chamada para a função, a segunda parte da expressão condicional é acionada, o que retorna a média:
M ? (a-f(M))/0 : a --
Agora podemos entender melhor a expressão:
Está:
A diferença entre as médias será um número positivo, um número negativo ou 0.
Dividir a diferença por 0 resulta em Infinito , -Infinito ou NaN - fornecendo os três valores distintos, conforme necessário.
Casos de teste:
Mostrar snippet de código
fonte
A
- se para os parâmetros de função?Mathematica, 21 bytes
1 para
#
vitórias, -1 para#2
vitórias, 0 para empate.fonte
Sign[#-#2&@@Mean/@#]&
MATL , 8 bytes
Tããão muitos modificadores (
Y
eZ
). Não consigo encontrar uma maneira de torná-lo mais curto.sum / number_of_elements
é de três bytes. Pode ser uma maneira melhor de fazer isso-ZS
, mas não consigo encontrar uma.Experimente online!
Retorna
1
se a primeira entrada for maior,0
se eles empatarem e-1
se a segunda entrada for maior.fonte
05AB1E , 9 bytes
1 se
M
vencer, -1 seN
vencer e 0 para empate.Experimente online!
Explicação
fonte
Julia , 27 bytes
Experimente online!
Retorna
1
se a primeira média for maior,-1
se a segunda for e0
se elas estiverem vinculadas.fonte
Python 2 , 43 bytes
Experimente online!
fonte
Oitava , 27 bytes
Experimente online!
Pega dois vetores
x.y
como entrada, pega osmean
dois vetores e subtrai um do outro. Obter o sinal deste, para chegar1
,0
e-1
para as três alternativas diferentes.fonte
Python 2, 49 bytes
Experimente online
fonte
APL (Dyalog) , 11 bytes
Solicita uma lista de duas listas. Imprime
1
se a esquerda tiver uma média mais alta, 0 se eles tiverem a mesma média e¯1
se a direita tiver uma média mais alta.Experimente online!
⎕
pronto(
…)¨
Aplique a seguinte função tácita a cada um:+/
a soma÷
dividido por≢
a contagem-/
insira (e avalie) um sinal de menos entre eles×
signumfonte
Javascript,
81665856 byteseconomizou 15 bytes graças a Luke
economizou 2 bytes graças a Justin Mariner
Empate é 0, M é 1 e N é -1. Chamado usando a sintaxe de currying, por exemplo.
f([7])([6])
fonte
eval(a.join`+`)
.a=>(b=a.map(c=>eval(c.join`+`)/c.length))[0]-b[1]?b[0]>b[1]:0
para 61 bytes. Demora de entrada como uma matriz de matrizes, e saídas0
para um laço,true
para M efalse
N.a
) pela primeira vez ele é usado:n=>m=>Math.sign((a=b=>eval(b.join`+`)/b.length)(m)-a(n))
.PHP , 68 bytes
Experimente online!
PHP , 69 bytes
Experimente online!
operador de espaçonave -1 menos que, 0 empate, 1 maior que
fonte
Haskell,
6543 bytesEconomizou 22 bytes graças a nimi!
Tem que haver uma maneira muito melhor ... Mas as conversões de tipo me ferraram.Uso
Retorna
GT
se o primeiro argumento vencer,LT
se o segundo argumento vencer eEQ
se eles empatarem.Experimente online!
fonte
sum$x
comf.
. Além disso:length x
pode ser substituído porsum[1|_<-x]
, para que possa livrar-se foraf
completamente:a x=sum x/sum[1|_<-x]
.#
:...(a x)$a y
.(.a).compare.a
. Uso:( (.a).compare.a ) [7] [6]
.[1|_<-x]
é o mesmo que(1<$x)
.J, 10 bytes
Uma lista dada à esquerda e outra à direita. Retornará _1 se a média esquerda for menor, 1 se for maior e 0 se forem iguais
(+/%#)
é um garfo J padrão para calcular a média de uma lista&
fornece uma variação no garfo diádico. aplica o lado direito (o verbo médio, neste caso) a ambos os argumentos e os transmite ao verbo no lado esquerdo, que neste caso é ...*@-
subtrair seguido de "sign of": para que a média direita seja subtraída da esquerda e recebamos o sinal do resultado - _1, 1 ou 0fonte
Pitão,
10876 bytesObrigado @isaacg por salvar um byte
A entrada é aceita como uma lista aninhada
[N, M]
. Produz-1
seN < M
,1
seN > M
e0
se são iguais.Experimente Online
fonte
h.+
por-F
TI-Basic,
2521131210 bytes-2 bytes graças ao lirtosiast
fonte
Ans
vez deC
:mean(L₁)>mean(L₂:Ans+3(mean(L₁)=mean(L₂
21 bytes.(
e o)
.Geléia , 7 bytes
Um link monádico que aceita uma lista das duas listas,
N,M
que retorna:[-1]
forN
;[1]
paraM
; e[0]
por um empate.Como um programa completo que imprime o resultado (listas de itens única imprimir seu conteúdo apenas, por isso
-1
,1
ou0
).Experimente online!
Quão?
fonte
S÷L
e depois a converte em link único, através doS÷¥L$
qual pode ser reduzido,S÷Lµ
já que está no bem no início do programa e depois você coloca um€
ali para mapear e, como não há nenhum componente para comparar,_/Ṡ
você pode reduzir,IṠ
já que ainda existem 3 saídas cmp distintas ... sim, com certeza não pode ser feito em 5. Também 5 não vai ajudar desde que eu fiz o FGITW. :)Perl 6 , 25 bytes
Experimente online!
Leva um único argumento, uma lista de dois elementos de listas de números. Retorna
1
se a primeira lista tiver uma média maior,-1
se a segunda lista0
tiver e se as médias forem iguais.fonte
JavaScript (ES6), 60 bytes
Saídas
0
paraTie
,true
paraN
efalse
paraM
.fonte
JavaScript (ES6),
6054 bytes-6 bytes graças a @Luke e @Neil
Recebe entrada como uma matriz de 2 elementos
[N, M]
. Saídastrue
,0
oufalse
paraN
,Tie
, orM
, respectivamente.Explicação
Snippet de teste
Números de entrada separados por espaços / vírgulas.
Mostrar snippet de código
fonte
Math.sign(y-x)
pory-x?x>y:0
. Saídas0
paraTie
,true
paraN
efalse
paraM
.x-y&&x>y
possivelmente?Pip , 13 bytes
Esta é uma função que leva uma lista de listas. Retorna
1
se a primeira média for maior,-1
se a segunda for maior,0
se empatada. Execute todos os casos de teste aqui.fundo
Esta solução faz uso pesado de dois dos metaoperadores do Pip:
$
, dobre. Pegue um operador binário e aplique-o entre os elementos de uma lista. Por exemplo,+
é adição, mas$+
soma uma lista. Observe que$
transforma um operador binário em um operador unário.*
mapa. Pegue um operador unário e aplique-o a cada elemento de uma lista. Por exemplo,#
fornece o comprimento de uma lista, mas#*
fornece (uma lista de) os comprimentos dos itens da lista.$+*
mapas dobram / mais sobre uma lista, somando cada um dos elementos da lista.A outra coisa a saber sobre o Pip é que muitos operadores trabalham por item nas listas por padrão. Por exemplo,
[1 2 3] * 5
dá[5 10 15]
;[1 2 3] * [2 3 4]
dá[2 6 12]
; e[[1 2] [3 4]] * [5 6]
dá[[5 10] [18 24]]
.Explicação
Usaremos um exemplo de entrada de
[[2 3 4] [2 3 4 6]]
:{...}
Define uma função. O (primeiro) argumento está vinculado à variável local
a
.#*a
Mapeie
#
para o argumento da função, obtendo os comprimentos das sublistas. Resultado:[3 4]
a/#*a
Divida (os elementos de) os sublistas
a
pelos seus respectivos comprimentos. Resultado:[[0.667 1 1.333] [0.5 0.75 1 1.5]]
$+*a/#*a
Mapeie
$+
(dobre na adição) para esse resultado, somando as sublistas. Resultado:[3 3.75]
$CM$+*a/#*a
Dobre
CM
, o que fornece-1
,0
ou1
depende da comparação de seus dois operandos (como o de Pythoncmp
). Resultado:-1
(porque3
é menor que3.75
).Você também pode definir funções no Pip escrevendo expressões contendo a função de identidade
_
. Por exemplo,_*_
é uma função que enquadra seu argumento - açúcar sintático por{a*a}
e menos bytes. No entanto, há um erro na versão atual do intérprete que impede o_
trabalho com o*
metaoperador. Uma vez que é fixo, esta solução pode ser 11 bytes :$CM$+*_/#*_
.fonte
C (gcc), 91
98bytesLugar errado para C e provavelmente a única resposta que não precisa de divisão. Pelo menos o código é exibido sem um controle deslizante.
Voltar 0,1,2 para
M>N
,M=N
,M<N
respectivamente. Toma de entrada comolength of M
,length of N
,M
,N
.fonte
Braquilog , 8 bytes
Experimente online!
Resultados
1
se a primeira lista tiver uma média maior,-1
se a segunda lista tiver uma média maior e0
se eles estiverem vinculados.Explicação
fonte
Java, 105 bytes
Lambda que recebe uma lista aninhada, conforme entradas permitidas.
Transmite a lista de listas, converte as duas para as médias e retorna o sinal da diferença.
1
se a primeira lista for maior,-1
se a segunda lista for maior,0
por empate.fonte
Stream
s diretamente, como eu fiz .R
3834 bytesFunção que recebe como entrada dois vetores numéricos. Retorna 1 se a média da primeira lista for maior, 0 se eles forem iguais e -1 se a segunda média da lista for maior.
fonte
f=
.{}
do corpo da função.MATL , 6 bytes
Não seja tão mau! *
Ordem da pilha de entrada:
Resultado:
Experimente online!
* Esta resposta foi jogada sem ser má com números pobres e indefesos.
fonte
Java (OpenJDK 8) ,
7662 bytesExperimente online!
Como a entrada pode ser qualquer coisa, decidi usar
IntStream
s como entrada. Você pode obter essa entrada de um padrãoint[]
comArrays.stream(array)
.A saída é
1
para "N wins",-1
"M wins" e0
empate.Economizar
fonte
java.util.Arrays.stream(array).map(java.util.Arrays::stream)
). Somente quando reli a pergunta hoje, achei que esse formato de entrada é tão válido quanto qualquer outro..orElse(0)
uma redução viável de.getAsDouble()
?(a,b)->Math.signum(a.average().orElse(0)-b.average().orElse(0));
é de 64 bytesDyalog APL, 14 bytes
1
se a esquerda for maior,¯1
se a direita estiver0
empatada.Quão?
¨∘⊢
para cada lista+/÷≢
calcular média ( divisão da+/
soma÷
pelo≢
comprimento)-/
subtrair as médias×
sinal do resultadofonte
Lisp comum ,
7471 bytesExperimente online!
fonte