Définition
On dit qu'un vecteur a contenant n éléments majorise ou domine un vecteur b avec n éléments ssi pour toutes les valeurs k telles que 1 ≤ k ≤ n , la somme du premier élément de a ↓ jusqu'au k ème élément de a ↓ est plus grande supérieur ou égal à la somme des premier à k ème éléments de b ↓ , où v ↓ représente le vecteur v trié par ordre décroissant.
C'est,
a_1 >= b_1
a_1 + a_2 >= b_1 + b_2
a_1 + a_2 + a_3 >= b_1 + b_2 + b_3
...
a_1 + a_2 + ... + a_n-1 >= b_1 + b_2 + ... + b_n-1
a_1 + a_2 + ... + a_n-1 + a_n >= b_1 + b_2 + ... + b_n-1 + b_n
où a et b sont triés par ordre décroissant.
Aux fins de ce défi, nous utiliserons une légère généralisation de la majoration: nous dirons qu'une liste est une majoration non triée d'une autre si toutes les inégalités ci-dessus sont vraies sans trier a et b . (Ceci est, bien sûr, mathématiquement inutile, mais rend le défi plus intéressant.)
Défi
Étant donné une entrée de deux listes distinctes a et b d'entiers compris entre 0 et 255 (inclus), les deux listes de longueur n ≥ 1, indiquent si la première liste non triée-majorise la seconde ( a > b ), la seconde non triée- majorise le premier ( b > a ), ou aucun.
Vous pouvez éventuellement demander que la longueur des deux listes soit fournie en entrée. La sortie doit toujours être l'une des trois valeurs distinctes, mais les valeurs elles-mêmes peuvent être ce que vous voulez (veuillez spécifier quelles valeurs représentent a > b , b > a , et aucune dans votre réponse).
Cas de test pour a > b :
[255] [254]
[3,2,1] [3,1,2]
[6,1,5,2,7] [2,5,4,3,7]
Cas de test pour b > a :
[9,1] [10,0]
[6,5,4] [7,6,5]
[0,1,1,2,1,2] [0,1,2,1,2,1]
Cas de test sans majoration:
[200,100] [150,250]
[3,1,4] [2,3,3]
[9,9,9,9,9,0] [8,8,8,8,8,9]
la source
Réponses:
Gelée ,
1086 octets2 octets grâce à @orlp.
2 octets grâce à @Dennis.
Essayez-le en ligne!
1
poura>b
,-1
poura<b
,0
pour aucune majoration.S'il y avait à la fois
1
et-1
présent (certaines sommes cumulées sont plus grandes, d'autres plus petites), alors la dernière étape produirait0
.la source
ngn / apl, 11 octets
Basé sur la méthode de @Leaky Nun's réponse de .
Compte tenu de deux listes A et B , trouver la différence entre chaque valeur par éléments, ou encore C = A - B . Ensuite, trouvez les sommes cumulées de C et prenez le signe de chacune. La somme des valeurs de signe unique sera le résultat. Si A > B , le résultat est 1, si A < B le résultat est -1, et s'il n'y a pas de majorité, le résultat est 0.
Essayez-le en ligne.
la source
Julia, 30 octets
4 octets enregistrés grâce à @Dennis!
la source
a^b=sum(sign(cumsum(a-b))∪0)
enregistre quelques octets.Python 3.5, 85 octets:
Une fonction lambda anonyme. Retour
[True,False]
sia>b
,[False,True]
sib>a
ou[False,False]
si aucun de ces deux éléments n'est vrai. J'espère que ça va.Essayez-le en ligne! (Ideone)
la source
Cheddar ,
118octetsFondamentalement, un port de ma réponse Jelly .
Le fait que la portée à l'intérieur de la fonction soit brisée entraînant l'impossibilité de définir une variable à l'intérieur de la fonction signifie que je devrais faire
[xxx].map(i->yyy)[0]
au lieu devar a=xxx;yyy
.Prend le tableau transposé en entrée.
la source
Python 2, 73 octets
Testez-le sur Ideone .
la source
Rubis,
7259 octetsRenvoie
1
poura>b
,-1
poura<b
,0
pour aucun.-13 octets provenant de la suppression de la somme de @Dennis dans leur réponse Python
Essayez-le en ligne!
la source
Python 2, 59 octets
Les sorties:
1
poura>b
2
pourb>a
3
pour ni l'un ni l'autreItère dans la liste, en suivant la somme cumulée
t
des différences. Le nombres
suit les signes qui ont été considérés comme un nombre à deux bitsr
: positifs dans le bit de droite et négatifs dans le bit de gauche. Cela se produit viacmp(t,0)%3
, ce qui donnet>0
→+1
→ 1t==0
→0
→ 0t<0
→-1
→ 2La prise
or
de ceci et la valeur actuelle der
met à jour les 2 bits avecor
, les valeurs nulles n'ayant aucun effet.la source
Javascript (en utilisant une bibliothèque externe-Enumerable) (123 octets)
Lien vers la bibliothèque: https://github.com/mvegh1/Enumerable
Explication du code: passez les vecteurs a et b, créez la fonction globale z. z commencera par créer un tableau d'entiers à partir de 1, pour un compte de a.length. Tout vérifiera que le prédicat est vrai pour chaque membre appartenant à a. Ce prédicat dit de charger un en tant qu'énumérable, de prendre un compte de cet équivalent énumérable à la valeur d'itération actuelle de cette plage que nous avons créée, et de résumer cela. Vérifiez si> = la même logique du tableau "b". Donc, nous appelons z dans l'ordre de (a, b), et comparons cela à l'ordre de (b, a) ... si égal, nous retournons 0 pour signifier qu'il n'y a pas de majeur. Sinon, nous retournons 1 si (a, b) est vrai, sinon -1
la source