Étant donné un tableau 2D d'entiers, trions ses lignes et colonnes en blocs. Cela signifie que vous n'avez qu'à trier une ligne ou une colonne donnée, mais en appliquant les transformations nécessaires pour le trier à toutes les autres lignes ou colonnes du tableau 2D.
Règles
- L'entrée sera un tableau 2D d'entiers et un entier indexé 1. Cet entier représentera la ligne à trier si le nombre est positif, ou la colonne à trier si le nombre est négatif (ou l'inverse vous voulez). Exemple: étant donné un
4x3
tableau (lignes x colonnes), vous pouvez trier la deuxième colonne avec un-2
argument ou la troisième ligne avec un3
argument. Ce deuxième argument ne sera jamais nul et sa valeur absolue ne sera jamais supérieure à la dimension correspondante du tableau. - La sortie sera également un tableau 2D d'entiers avec les transformations nécessaires appliquées pour trier la ligne ou la colonne donnée. Alternativement, vous pouvez simplement écrire le tableau dans STDOUT.
- Le tableau de sortie aura la ligne ou la colonne spécifiée triée par ordre croissant. Notez simplement que lorsque vous devez échanger deux numéros d'affilée, toutes les colonnes où se trouvent les numéros seront échangées. Et lorsque vous devez échanger deux nombres dans une colonne, les lignes entières où se trouvent les nombres seront échangées.
- Dans le cas où le même numéro apparaît plusieurs fois dans la ligne / colonne à trier, il y aura plusieurs solutions possibles selon la façon dont vous permutez les valeurs, faites juste en conséquence avec le reste des lignes / colonnes à permuter.
Exemples
Positive indices for rows and negative indices for columns
[5 8 7 6 [1 3 2 4
1 3 2 4 order by -3 (3rd column) --> 9 6 3 0
9 6 3 0] 5 8 7 6]
[5 8 7 6 [9 6 3 0
1 3 2 4 order by -4 (4th column) --> 1 3 2 4
9 6 3 0] 5 8 7 6]
[5 8 7 6 [5 7 8 6
1 3 2 4 order by 2 (2nd row) --> 1 2 3 4
9 6 3 0] 9 3 6 0]
[5 8 7 6 [6 7 8 5
1 3 2 4 order by 3 (3rd row) --> 4 2 3 1
9 6 3 0] 0 3 6 9]
[1 2 [1 2 [3 2
3 2] order by -2 (2nd column) --> 3 2] or 1 2] (both are valid)
[7 5 9 7 [5 7 7 9 [5 7 7 9
1 3 2 4 order by 1 (1st row) --> 3 1 4 2 or 3 4 1 2
9 6 3 0] 6 9 0 3] 6 0 9 3]
C'est le code-golf , donc le code le plus court pour chaque langue peut gagner!
code-golf
array-manipulation
sorting
Charlie
la source
la source
Réponses:
R , 55 octets
Essayez-le en ligne!
Réaffecte l'
+
opérateur (en fait une fonction dans R) à laorder
fonction, qui renvoie les indices d'un vecteur du plus petit au plus grand. Ensuite, c'est juste une manipulation de tableau.la source
R , 55 octets
Essayez-le en ligne!
Alternative à la réponse de ngm ; une fonction récursive qui a été inspirée par la réponse de DimChtz
la source
Matlab,
736247 octetsEssayez-le en ligne!
-11 octets grâce à @Giuseppe.
-15 octets grâce à @LuisMendo.
la source
Japt ,
1817 octetsnégatif pour les lignes et positif pour les colonnes
Essayez-le en ligne!
la source
U
est négatif - la version précédente de 17 octets fonctionne cependant.ß
automatiquement appliquéU
. Cela pourrait créer des problèmes en essayant de passer des chaînes littérales, mais postez une suggestion au dépôt GitHub de toute façon pour une enquête plus approfondie.05AB1E ,
252414 octetsUn énorme -10 octets grâce à @Emigna .
Utilise une entrée entière positive pour trier les lignes, négative pour les colonnes.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
diø}Σ¹Ä<è]¹diø
ce qui est un sous-ensemble du vôtre, donc je ne poste pas de réponse séparée.JavaScript (ES6), 90 octets
Essayez-le en ligne!
Comment?
JS n'a pas de méthode de transposition native, nous devons donc en définir une:
Fonction principale:
la source
MATL , 17 octets
Essayez-le en ligne!
Ou vérifiez tous les cas de test
Explication
la source
APL (Dyalog Classic) , 23 octets
Essayez-le en ligne!
la source
Python 2 ,
7170 octetsEssayez-le en ligne!
Si
n
est négatif, les lignes sont triées en fonction de la colonnen
.Sinon, la matrice est transposée, triée de la même manière et à nouveau transposée.
la source
Gelée , 12 octets
Essayez-le en ligne!
la source
C # (.NET Core) , 186 octets
Essayez-le en ligne!
Non golfé:
La fonction shift que nous utiliserons deux fois, donc une variable de fonction économisera de l'espace. La fonction parcourt la dimension horizontale du tableau sur l'index et ajoute chaque élément de cet index dans chaque tableau horizontal à un nouveau tableau de sortie (horizontalement) - un peu comme dans la solution JS d'Arnoud.
Maintenant, l'ordre est simple, ordonnez le tableau horizontal par numéro à l'index (argument -1), en décalant éventuellement le tableau avant et après le tri.
Vu comment la question parle spécifiquement des tableaux, nous convertissons plusieurs fois en tableau (très, très inutile). Se sentir un peu idiot d'utiliser un langage aussi verbeux dans le code golf hehe.
la source
C # (.NET Core) ,
142/139138/135 octets (et encore un autre -1 par Kevin)Essayez-le en ligne!
Non golfé:
Nouvelle approche tout en ligne; la réponse négative ordonne toujours les tableaux par élément à l'indice. Sinon, une collection de paires index-valeur est créée à partir du tableau à index et triée par valeur. Cela crée effectivement une collection d'indices dans l'ordre à ajouter. Ensuite, pour chaque réseau, les éléments dans les positions prédéterminées sont sélectionnés. Un peu de rognage de code et laid, laid, laid ** sanglote silencieusement ** la réutilisation des paramètres d'entrée est impliquée, et c'est parti ... 142 octets.
Encore une fois, l'argument tableaux est strictement appliqué, ajoutant une certaine surcharge pour les appels .ToArray ().
135 octets de réclamation, hein?! Les tuples de valeur inférés en C # 7.2 couperaient trois octets supplémentaires, mais tio.run ne le permet pas. Par conséquent, c'est la réponse que j'ai décidé de publier pour une vérification facile.
la source
(a,s)=>
peut être un currya=>s=>
.(s<0)?
n'a pas besoin de parenthèses et-s-1
peut l'être~s
. Essayez-le en ligne: 137 octetsJava (OpenJDK 8) , 326 octets
Essayez-le en ligne!
Eh bien les gars, cette question était très frustrante pour moi, et j'ai posté ma réponse en sachant que j'oubliais quelque chose, heureusement, nous avons des légendes comme Kevin Cruijssen ici pour nous aider :)
Java (OpenJDK 8) , 281 octets
Essayez-le en ligne!
la source
a->b->
au lieu de(a,b)->
et supprimer lareturn
déclaration, car vous modifiez le tableau d'entrée. 281 octets Encore une belle réponse, cependant. +1 de moi. J'ai fait le défi en 05AB1E, mais je ne l'aurais même pas essayé en Java cette fois. ;)Nettoyer , 95 octets
Essayez-le en ligne!
la source
Kotlin , 192 octets
Essayez-le en ligne!
la source
Rubis , 69 octets
Essayez-le en ligne!
la source
Rouge ,
190185 octetsEssayez-le en ligne!
Explication:
Ma solution actuelle fait 175 octets, mais elle ne fonctionne pas dans TIO. La voici, fonctionnant normalement dans la console rouge:
Rouge , 175 octets
la source
VBA (Excel), 205 octets
Yay! 2e décompte d'octets le plus long! Je n'ai pas complètement perdu: D
Golfé:
Cela trie toutes les données de la feuille de calcul ouverte (active) en utilisant UsedRange ... qui peut être bogué, mais ne doit contenir que des cellules qui ont été modifiées.
Non golfé:
la source
Sub d(a)
With Sheet1.Sort
.SortFields.Clear
.SortFields.Add IIf(a<0,Columns(Abs(a)),Rows(Abs(a)))
.SetRange Sheet1.UsedRange
.Orientation=(a<0)+2
.Apply
End With
End Sub
.SortFields
définition afin que vous puissiez également supprimer la.Sortfields.Clear
ligne.Perl 6 , 43 octets
Essayez-le en ligne!
Fonction curry.
Explication
la source
Physica , 45 octets
Très similaire à la réponse JS d' Arnauld .
Essayez-le en ligne!
Comment ça fonctionne?
Une explication plus élaborée et visuelle peut être trouvée dans la réponse liée.
la source
J , 32 octets
Essayez-le en ligne!
Noter la
g=.
du verbe principal ne compte pas.Une version explicite pour les mêmes octets
J , 32 octets
Essayez-le en ligne!
la source
Clojure, 91 octets
Argh,
apply map list
* 2.la source