Inspiré par cette question et raffiné par Luis Mendo .
Défi
Étant donné une matrice 2D d'entiers, chaque ligne a une valeur maximale. Un ou plusieurs éléments de chaque ligne seront égaux à la valeur maximale de leur ligne respective. Votre objectif est de déterminer la ou les colonnes qui contiennent le plus d'entrées qui sont égales à la valeur maximale de leur ligne respective ainsi que le nombre de maxima par ligne trouvés dans ces colonnes.
Contribution
- L'entrée sera une matrice
M
x non videN
(M
> 0 etN
> 0) sous la forme qui convient le mieux à la langue de votre choix.
Production
- Votre programme doit renvoyer l' index de chaque colonne contenant le nombre maximal de maxima par ligne (sous forme de valeurs distinctes ou d'une liste). Vous pouvez utiliser une indexation à 0 ou à 1 (spécifiez dans votre description).
- Votre programme doit également renvoyer le nombre de maxima présents dans ces colonnes (un seul chiffre).
- L'ordre / format de la sortie est flexible mais doit être expliqué dans le texte accompagnant votre réponse.
Information additionnelle
- Toutes les entrées de la matrice d'entrée seront des entiers positifs.
- Si la valeur maximale d'une ligne est partagée par plusieurs éléments de cette ligne, toutes les occurrences de cette valeur comptent dans le total de leurs colonnes.
- Si plusieurs colonnes contiennent le même nombre de maxima, vous devez renvoyer une liste de toutes les colonnes qui avaient ce nombre de maxima.
Un exemple
Tenez compte des commentaires
7 93
69 35
77 30
La ligne 1 a un maximum de 93, qui n'apparaît qu'une seule fois, à savoir dans la colonne 2. La ligne 2: se produit dans la colonne 1. La ligne 3: également dans la colonne 1. La colonne gagnante est donc 1, avec 2 maxima. Ainsi, la sortie sera [1] [2]
. Si nous changeons l'entrée en
7 93
69 35
77 77
la sortie sera [1 2] [2]
, car les deux colonnes ont 2 maxima.
Cas de test
input => output ( [1-based index array], [nMaxima] )
----------------------------------------------
7 93
69 35 => [1], [2]
77 30
7 93
69 35 => [1 2], [2]
77 77
1 2 3 4 => [4], [2]
5 6 7 8
16 2 3 13
5 11 10 8 => [1 2 4], [1]
9 7 6 12
1 1 1 1 => [1 2 3 4], [1]
25 6 13 25 => [1 4], [1]
1
2
3 => [1], [4]
4
100 => [1], [1]
Notation
C'est le code-golf , le code le plus court en octets gagne. Tiebreaker revient à la réponse précédente.
Classement
Vous trouverez ci-dessous un extrait de pile pour analyser toutes les entrées.
Réponses:
Gelée , 9 octets
L'entrée est une liste 2D, la sortie est une paire: une liste d'indices basés sur 1 et le nombre maximal de maxima.
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
J, 27 octets
Il s'agit d'un verbe monadique, utilisé comme suit dans le cas du deuxième exemple:
La sortie se compose de deux cases et utilise une indexation basée sur 0. Essayez-le ici!
Explication
la source
MATL, 17 octets
La première sortie est le nombre maximum de maxima et la deuxième sortie est les colonnes dans lesquelles cela s'est produit (indexation basée sur 1).
Essayez-le en ligne!
Explication
la source
MATL , 17 octets
L'entrée est un tableau 2D, avec des lignes séparées par des points-virgules. Ainsi, les entrées pour les cas de test sont
La sortie est: d'abord la quantité maximale de maxima, puis un ou plusieurs indices de colonne.
Essayez-le en ligne!
Explication
Cela utilise une approche différente de la réponse de Suever .
Une matrice de valeurs logiques (
true
etfalse
) est d'abord calculée, oùtrue
indique la présence d'un maximum de ligne. Ensuite, les indices de colonne destrue
valeurs sont extraits dans un vecteur. Enfin, le mode de ce vecteur est calculé (nombre maximum de maxima), ainsi que toutes les valeurs les plus fréquentes (indices de colonne souhaités).la source
Pyth,
201917 octets1 octet grâce à @Suever .
1 octet grâce à @Jakube .
Suite de tests.
La sortie est indexée 0.
L'ordre est inversé.
Toutes les entrées
Toutes les sorties
Comment ça fonctionne
la source
CJam ,
383531 octets2 octets de moins grâce à @FryAmTheEggMan, avec l'aide également de @quartata. Merci également à @Dennis d'avoir supprimé 4 octets supplémentaires.
L'entrée est de la forme
La sortie est un tableau d'index de colonne basés sur 1 et un nombre.
Essayez-le en ligne!
la source
q~_::e>.f=:.+_:e>_@f{=U):Ua*~}p
enregistre quelques octets. Le transformer en un bloc de code économiserait 1 de plus.{=U):Ua*~}
fait ...Pyke, 17 octets
Essayez-le ici!
la source
Python 2, 106 octets
L'entrée est une liste 2D de flottants, la sortie est une paire: une liste d'indices basés sur 0 et un entier.
Testez-le sur Ideone .
la source
Julia, 54 octets
L'entrée est une matrice, la sortie est une paire: une liste d'indices basés sur 1 et le nombre maximal de maxima.
Essayez-le en ligne!
la source
JavaScript (ES6), 111 octets
Renvoie un tableau de deux éléments; le premier est le nombre maximal de maxima, le second est le tableau de colonnes indexées zéro avec ce nombre.
la source
Octave,
4746 octetsCela crée une fonction anonyme qui s'assigne automatiquement
ans
et peut être exécutée à l'aideans([1 2 3; 4 5 6])
. Il renvoie un tableau de cellules à deux éléments où le premier élément est le nombre maximal de maxima et le second est l'index basé sur 1 des colonnes contenant ces maxima.Tous les cas de test
la source
Python 3, 142 octets
Ici, l'algorithme consiste essentiellement à parcourir chaque ligne et à augmenter le score des colonnes qui ont le maximum de cette ligne. Trouvez ensuite le maximum des scores et recherchez les colonnes qui ont ce score maximum et renvoyez-les. Les colonnes sont indexées 1. J'ai essayé de doubler cela en lambda, mais avec la génération des scores colonne par colonne, c'était 153 octets.
Cas de test
la source
Clojure, 150 octets
Homme qui est long, j'ai le sentiment que cela pourrait être beaucoup simplifié. Au moins, il produit la sortie correcte.
la source
05AB1E , 14 (ou 12) octets
Sorties au format
[[1-indexed columns-list], maxima]
.Essayez-le en ligne ou vérifiez tous les cas de test .
S'il est permis d'avoir des éléments
0
dans la liste des colonnes que nous ignorons, cela pourrait être 2 octets de moins en supprimant0K
:Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source