Obtenir la moyenne d'une liste (par exemple [2,6,7]
)
- Obtenez la longueur de la liste:
[2,6,7] -> 3
- La somme des numéros dans la liste:
2 + 6 + 7 = 15
. - Diviser la somme par leur nombre:
15 / 3 = 5
.
Vous devez comparer les moyennes de deux listes d' entiers positifs N et M , en renvoyant une valeur si N a une moyenne plus élevée, une autre valeur si M a une moyenne plus élevée et une autre en cas d'égalité.
Règles d'E / S
Toutes les méthodes d'entrée et de sortie standard sont autorisées.
Contribution
Vous pouvez prendre la saisie sous la forme de deux listes distinctes, une liste imbriquée ou tout autre élément que vous jugez approprié pour la tâche. Veuillez spécifier le format.
Production
Les valeurs fournies doivent être distinctes et doivent comprendre au moins un caractère non blanc. De plus, ils doivent être cohérents entre les exécutions (une seule valeur pour N , une seule valeur pour M , une seule valeur pour Tie ). Veuillez les préciser dans votre réponse. Les valeurs peuvent être des chaînes non vides, des valeurs booléennes, des entiers ou tout ce que vous jugez approprié.
Spécifications
Les listes n'auront pas nécessairement la même longueur.
Vous êtes assuré que les listes ne sont pas vides.
Cas de test
J'ai choisi les valeurs N wins
, M wins
etTie
qui sont assez évidentes.
N, M -> Sortie (moyennes) [7], [6] -> N gagne (N en a 7, M en a 6) [4,5], [4,4] -> N gagne (N en a 4,5, M en a 4) [2,3,4], [4,5,6] -> M gagne (N en a 3, M en a 5) [4,1,3], [7,3,2,1,1,2] -> Cravate (les deux ont 2,666 ...) [100,390,1], [89,82,89] -> N gagne (N a 163,666 ..., M a 86,666 ...) [92,892], [892,92] -> Tie (les listes sont fondamentalement identiques) [10,182], [12,78,203,91] -> Cravate (les deux en ont 96)
Les échappatoires par défaut s'appliquent. Les explications sont encouragées! C'est le code-golf , donc le code le plus court en octets gagne!
la source
Réponses:
En fait , 5 octets
Essayez-le en ligne!
1
pourN > M
,0
pourN = M
,-1
pourN < M
.Explication:
la source
Mathematica, 15 octets
Essayez-le en ligne!
Function
qui attend une liste de deux listes.Mean/@#
prend la moyenne arithmétique de chaque liste en entrée, puis ces moyennes sont passées àOrder
, qui retourne-1
si la première liste gagne,0
s'il y a égalité et1
si la deuxième liste gagne.la source
JavaScript (ES6),
5250 octets(Enregistré 2 octets grâce à @Shaggy.)
Voici deux solutions de 50 octets:
Renvoie Infinity pour N, -Infinity pour M et NaN pour une égalité.
La première solution peut nécessiter un peu d'explication en raison de la récursivité:
Au premier appel à la fonction,
a
est initialisé comme la moyenne duN
tableau:M
a une valeur à ce stade, donc la première partie de l'expression conditionnelle est appelée:M ? (a-f(M))/0 : a ----------
La fonction est appelée dans cette expression, cette fois remplaçant
M
pourN
.Sur ce deuxième appel à la fonction,
a
est initialisé comme la moyenne deN
–– qui étaitM
lors de l'appel précédent.Puisqu'il n'y a pas de second paramètre lors de cet appel à la fonction, la deuxième partie de l'expression conditionnelle est déclenchée, ce qui renvoie la moyenne:
M ? (a-f(M))/0 : a --
Nous pouvons maintenant mieux comprendre l'expression:
Ses:
La différence entre les moyennes sera un nombre positif, un nombre négatif ou 0.
En divisant la différence par 0 , vous obtenez Infinity , -Infinity ou NaN - fournissant les trois valeurs distinctes requises.
Cas de test:
Afficher l'extrait de code
la source
A
aux paramètres de la fonction?Mathematica, 21 octets
1 pour les
#
victoires, -1 pour les#2
victoires, 0 pour l'égalité.la source
Sign[#-#2&@@Mean/@#]&
MATL , 8 octets
Soooo de nombreux modificateurs (
Y
etZ
). Je ne peux pas trouver un moyen de le raccourcir.sum / number_of_elements
est de trois octets. Ce pourrait être une meilleure façon de le faire-ZS
, mais je n'en trouve pas.Essayez-le en ligne!
Renvoie
1
si la première entrée est plus grande,0
si elles sont liées et-1
si la deuxième entrée est plus grande.la source
05AB1E , 9 octets
1 si
M
gagne, -1 siN
gagne et 0 pour une égalité.Essayez-le en ligne!
Explication
la source
Julia , 27 octets
Essayez-le en ligne!
Renvoie
1
si la première moyenne est plus grande,-1
si la seconde l'est et0
si elles sont égales.la source
Python 2 , 43 octets
Essayez-le en ligne!
la source
Octave , 27 octets
Essayez-le en ligne!
Prend deux vecteurs
x.y
en entrée, prend lesmean
deux vecteurs et soustrait l'un de l'autre. Obtenez le signe de cela, pour obtenir1
,0
et-1
pour les trois alternatives différentes.la source
Python 2, 49 octets
Essayez-le en ligne
la source
APL (Dyalog) , 11 octets
Demande une liste de deux listes. Imprime
1
si la gauche a une moyenne plus élevée, 0 si elles ont la même moyenne et¯1
si la droite a une moyenne plus élevée.Essayez-le en ligne!
⎕
rapide(
…)¨
Appliquer à chacun la fonction tacite suivante:+/
la somme÷
divisé par≢
le décompte-/
insérer (et évaluer) un moins entre eux×
signumla source
Javascript,
81665856 octetséconomisé 15 octets grâce à Luke
économisé 2 octets grâce à Justin Mariner
Le lien est 0, M est 1 et N est -1. Appelé en utilisant la syntaxe de curry, par exemple.
f([7])([6])
la source
eval(a.join`+`)
.a=>(b=a.map(c=>eval(c.join`+`)/c.length))[0]-b[1]?b[0]>b[1]:0
pour 61 octets. Il prend l'entrée comme un tableau de tableaux et les sorties0
pour une égalité,true
pour M etfalse
pour N.a
) la première fois qu'il est utilisé:n=>m=>Math.sign((a=b=>eval(b.join`+`)/b.length)(m)-a(n))
.PHP , 68 octets
Essayez-le en ligne!
PHP , 69 octets
Essayez-le en ligne!
opérateur de vaisseau spatial -1 inférieure à, 0 tie, une plus grande alors
la source
Haskell,
6543 octets22 octets enregistrés grâce à nimi!
Il doit y avoir un bien meilleur moyen ... Mais les conversions de type m'ont foutu.Usage
Renvoie
GT
si le premier argument l'emporte,LT
si le deuxième argument l'emporte etEQ
s'ils sont liés.Essayez-le en ligne!
la source
sum$x
avecf.
. Aussi:length x
peut être remplacé parsum[1|_<-x]
, de sorte que vous pouvez vous débarrasserf
complètement:a x=sum x/sum[1|_<-x]
.#
:...(a x)$a y
.(.a).compare.a
. Utilisation:( (.a).compare.a ) [7] [6]
.[1|_<-x]
est le même que(1<$x)
.J, 10 octets
Une liste donnée à gauche, une à droite. Renvoie _1 si la moyenne de gauche est plus petite, 1 si elle est plus grande et 0 si elles sont égales
(+/%#)
est une fourchette J standard pour calculer la moyenne d'une liste&
fournit une variation sur la fourche dyadique. il applique le côté droit (le verbe moyen, dans ce cas) aux deux arguments, puis les transmet au verbe du côté gauche, qui dans ce cas est ...*@-
soustraire suivi de "signe de": donc la moyenne de droite est soustraite de la gauche, et on nous donne le signe du résultat - _1, 1 ou 0la source
Pyth,
10876 octetsMerci @isaacg d'avoir enregistré un octet
L' entrée est considérée comme une liste imbriquée,
[N, M]
. Sorties-1
siN < M
,1
siN > M
et0
si elles sont égales.Essayez-le en ligne
la source
h.+
par-F
TI-Basic,
2521131210 octets-2 octets grâce au lirtosiast
la source
Ans
lieu deC
:mean(L₁)>mean(L₂:Ans+3(mean(L₁)=mean(L₂
, 21 octets.(
et le)
.Gelée , 7 octets
Un lien monadique acceptant une liste des deux listes,
N,M
qui renvoie:[-1]
forN
;[1]
pourM
; et[0]
pour une cravate.En tant que programme complet , il imprime le résultat (liste d'article unique imprimer leur contenu uniquement, donc
-1
,1
ou0
).Essayez-le en ligne!
Comment?
la source
S÷L
, puis vous le convertissez en lien unique viaS÷¥L$
lequel peut être raccourciS÷Lµ
car il se trouve à la tout au début du programme, puis vous mettez un€
droit là pour mapper, puis comme il n'y a pas de fonction de comparaison que vous utiliseriez,_/Ṡ
mais vous pouvez le raccourcirIṠ
car il s'agit toujours de 3 sorties cmp distinctes ... fait en 5. Aussi 5 n'aidera pas depuis que je FGITW'd. :)Perl 6 , 25 octets
Essayez-le en ligne!
Prend un seul argument, une liste à deux éléments de listes de nombres. Renvoie
1
si la première liste a une moyenne supérieure,-1
si la deuxième liste en a et0
si les moyennes sont égales.la source
JavaScript (ES6), 60 octets
Sorties
0
pourTie
,true
pourN
etfalse
pourM
.la source
JavaScript (ES6),
6054 octets-6 octets grâce à @Luke et @Neil
Prend l'entrée comme un tableau à 2 éléments
[N, M]
. Sortiestrue
,0
oufalse
pourN
,Tie
ouM
, respectivement.Explication
Extrait de test
Entrez les nombres séparés par des espaces / virgules.
Afficher l'extrait de code
la source
Math.sign(y-x)
pary-x?x>y:0
. Sorties0
pourTie
,true
pourN
etfalse
pourM
.x-y&&x>y
peut-être?Pip , 13 octets
Il s'agit d'une fonction qui prend une liste de listes. Renvoie
1
si la première moyenne est plus grande,-1
si la seconde est plus grande,0
si elle est liée.Exécutez tous les cas de test ici.Contexte
Cette solution fait un usage intensif de deux des méta-opérateurs de Pip:
$
, plier. Prenez un opérateur binaire et appliquez-le entre les éléments d'une liste. Par exemple,+
est addition, mais$+
résume une liste. Notez que$
transforme un opérateur binaire en opérateur unaire.*
, carte. Prenez un opérateur unaire et appliquez-le à chaque élément d'une liste. Par exemple,#
donne la longueur d'une liste, mais#*
donne (une liste de) la longueur des éléments de la liste.$+*
cartes se replient / plus sur une liste, sommant chacun des éléments de la liste.L'autre chose à savoir sur Pip est que de nombreux opérateurs travaillent par défaut sur les listes. Par exemple,
[1 2 3] * 5
donne[5 10 15]
;[1 2 3] * [2 3 4]
donne[2 6 12]
; et[[1 2] [3 4]] * [5 6]
donne[[5 10] [18 24]]
.Explication
Nous utiliserons un exemple d'entrée de
[[2 3 4] [2 3 4 6]]
:{...}
Définit une fonction. Le (premier) argument est lié à la variable locale
a
.#*a
Mappez
#
à l'argument de la fonction, en obtenant les longueurs des sous-listes. Résultat:[3 4]
a/#*a
Divisez (les éléments de) les sous-listes de
a
par leurs longueurs respectives. Résultat:[[0.667 1 1.333] [0.5 0.75 1 1.5]]
$+*a/#*a
Mappez
$+
(pliez sur addition) à ce résultat, en additionnant les sous-listes. Résultat:[3 3.75]
$CM$+*a/#*a
Fold on
CM
, ce qui donne-1
,0
ou1
selon la comparaison de ses deux opérandes (comme Pythoncmp
). Résultat:-1
(car3
est plus petit que3.75
).Vous pouvez également définir des fonctions dans Pip en écrivant des expressions contenant la fonction d'identité
_
. Par exemple,_*_
est une fonction qui met son argument au carré - sucre syntaxique pour{a*a}
, et moins d'octets. Cependant, il existe un bogue dans la version actuelle de l'interpréteur qui empêche_
de travailler avec le*
méta - opérateur. Une fois que ce fixe, cette solution peut être 11 octets :$CM$+*_/#*_
.la source
C (gcc), 91
98octetsMauvais endroit pour C et probablement la seule réponse qui n'a pas besoin de division. Au moins, le code est affiché sans curseur.
Return 0,1,2 for
M>N
,M=N
,M<N
respectively. Takes input aslength of M
,length of N
,M
,N
.la source
Brachylog, 8 bytes
Try it online!
Outputs
1
if the first list has a bigger average,-1
is the second list has a bigger average, and0
if they are tied.Explanation
la source
Java, 105 bytes
Lambda that takes a nested list, as per allowable inputs.
Streams the list of lists, converts both to their averages, then returns the sign of the difference.
1
if the first list is larger,-1
if the second list is larger,0
for a tie.la source
Stream
s directly, like I did.R
3834 bytesFunction that takes as input two numeric vectors. Returns 1 if first list average is higher, 0 if they are the same and -1 if second list average is higher.
la source
f=
.{}
from the function body.MATL, 6 bytes
Don't be so mean!*
Input stack order:
Output:
Try it online!
*This answer was golfed without being mean to any poor, defenseless numbers.
la source
Java (OpenJDK 8),
7662 bytesTry it online!
Since the input can be anything, I decided to take
IntStream
s as input. You can get such an input from a standardint[]
withArrays.stream(array)
.The output is
1
for "N wins",-1
for "M wins", and0
for tie.Saves
la source
java.util.Arrays.stream(array).map(java.util.Arrays::stream)
). It's only when I re-read the question today that I thought this input format is as valid as any..orElse(0)
be a viable shortening of.getAsDouble()
?(a,b)->Math.signum(a.average().orElse(0)-b.average().orElse(0));
is 64 bytesDyalog APL, 14 bytes
1
if the left is greater,¯1
if the right is and0
on tie.How?
¨∘⊢
for each list+/÷≢
calculate average (+/
sum÷
divide by≢
length)-/
subtract the averages×
sign of the resultla source
Common Lisp,
7471 bytesTry it online!
la source