Défi:
Étant donné une liste d'entiers, trier par ordre décroissant par leur seul chiffre le plus grand. L'ordre des nombres avec le même plus grand chiffre est ensuite trié par deuxième plus grand chiffre, etc.
Nous ignorons les chiffres dupliqués dans les nombres. Et si tous les chiffres d'un numéro sont identiques, l'ordre de ces numéros dans la liste peut être comme vous le souhaitez.
Exemple:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Pourquoi? Voici les chiffres pertinents sur lesquels les numéros ont été triés:
Output:
[8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0 ]
Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]
Règles du défi:
- Nous ignorons les chiffres en double, donc
478
et-7738
seront classés comme478, -7738
, car les plus gros chiffres sont[8,7,4]
et[8,7,3]
, et non[8,7,4]
et[8,7,7,3]
. - Si plusieurs numéros ont les mêmes chiffres, l'ordre de ceux-ci peut être dans les deux sens. Donc,
373
et-73
peut être trié comme les deux373, -73
ou-73, 373
(les chiffres correspondent[7,3]
à ces deux nombres). - Si un numéro ne contient plus de chiffres à vérifier, il sera placé à l'arrière des numéros concernés. Donc,
123
et3120
sera trié comme3120, 123
, car les plus gros chiffres[3,2,1]
sont les mêmes, mais0
vient avantnone
. - Vous pouvez supposer que tous les nombres en entrée sont dans la plage
[-999999,999999]
. - Une seule des sorties possibles suffit en conséquence, mais vous êtes autorisé à sortir toutes les sorties possibles où les sous-listes peuvent être dans n'importe quelle permutation si vous le souhaitez (bien que je doute que cela économiserait des octets dans n'importe quelle langue).
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse avec des règles d'E / S par défaut , vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code (par exemple TIO ).
- De plus, l'ajout d'une explication à votre réponse est fortement recommandé.
Cas de test:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Input: [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
[902, -382, 34202, -34, 2132, -312, 321, 23, 11]
etc. The sublist [-312, 321, 2132] can be in any permutation
Input: [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
[29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
etc. The sublists [4, 44] and [2212, 21] can be in any permutation
Input: [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output: [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]
m:g/\d./
pour.abs.comb
: tio.run/…Python 2 ,
605554 octets-1 octet merci à Jonas Ausevicius .
Essayez-le en ligne!
Non golfé
Essayez-le en ligne!
la source
None
peut être remplacé parcmp
ensort
fonctionPython 2 ,
5860 octetslambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Essayez-le en ligne!
la source
Brachylog , 9 octets
Remarque: en raison du fonctionnement de la commande dans brachylog, cela ne fonctionne pas correctement sur le numéro. Ce problème est résolu en convertissant le nombre en chaîne (
ṫ
) au prix d'un octet.Essayez-le en ligne!
la source
ṫ
(to string) résout le problème. L'ordre des chiffres dans un nombre décroissant fonctionne comme suit. Commandez du plus petit au plus grand puis inversez. Le problème est que le nombre3120
ordonné du plus petit au plus grand est0123
égal à celui123
qui est inversé321
et non3210
ṫ
). Comme mentionné par @Arnauld, je pensais que votre commentaire signifiait que votre code actuel ne fonctionnait pas. Il pourrait être préférable de le mentionner comme: " Cela aurait pu être 8 octets en supprimant leṫ
(toString), mais malheureusement cela ne fonctionne pas comme prévu en raison de la façon dont la commande fonctionne dans Brachylog. "Pyth,
76 octets-1 octet par @Sok
Pyth, qui utilise uniquement ASCII imprimable, est un peu désavantagé ici. Encodé de manière optimale, ce serait des
6*log(95)/log(256) = 4.927
octets, battant 05AB1E.Expliqué:
Essayez-le ici .
la source
N
peut être laissée de côté pour économiser 1 octet - toutes les fonctions de type lambda déduisent la présence de la variable lambda principale s'il manque des arguments à la fin. Les exemples incluentm
inférerd
,f
inférerT
,u
inférerG
...Gelée , 8 octets
Essayez-le en ligne!
Comment ça marche
la source
Ṛ
plutôt que les upends,U
. Notez cependant que vous n'avez pas besoin duD
tri puisqueṢ
, est implémenté avec uniterable(z, make_digits=True)
appel à l'intérieur. C'était doncAṢQṚµÞṚ
pour 7.MathGolf ,
76 octetsEssayez-le en ligne! ou comme suite de tests .
Explication
Après avoir regardé la solution 05AB1E d'Emigna, j'ai constaté que je n'avais pas besoin de l'opérateur absolu (et ma réponse précédente était en fait incorrecte à cause de cet opérateur). Maintenant, la principale différence est que je convertis en chaîne et obtient des caractères uniques au lieu d'utiliser l'opérateur à 1 octet dans 05AB1E.
la source
Japt , 12 octets
Tous les cas de test
Explication:
la source
Haskell ,
5452 octetsEssayez-le en ligne!
la source
r=reverse
enregistre deux octets. Nous autorisons également les fonctions anonymes, ilf=
n'est donc pas nécessaire de les compter.f=r$r id.nub.show;r=(reverse.).sortOn
.Stax ,
67 octetsExécuter et déboguer
la source
-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
au lieu du8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
ou prévu8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. Ce cas de test est également utilisé dans l'exemple, et pour expliquer les règles, je voudrais donc y jeter un œil pour mieux le comprendre. Il semble que vous ne triiez qu'une seule fois le plus grand chiffre, sans aucune des autres règles?APL (Dyalog Extended) , 19 octets
Essayez-le en ligne!
Fixé à un coût de +2 octets grâce à OP.
la source
¯7738
est placé avant478
, mais il devrait être après: les chiffres[8,7,4]
viennent avant les chiffres[8,7,3]
.C (gcc) ,
114111109 octetsEssayez-le en ligne!
Explication:
f () utilise qsort () pour trier le tableau fourni en place. Utiliser la fonction de comparaison c () pour comparer les nombres qui évalue les nombres en utilisant v (). v () calcule un nombre plus élevé si des chiffres plus grands sont présents dans le paramètre.
[Edit 1] Amélioré de 3 octets. Crédits de 2 octets à Kevin. Merci
[Edit 2] 2 octets supplémentaires améliorés. Crédits à gastropner. Merci
la source
n>0
au golfn
je pense dans votre boucle de votre méthodev
.int*a,n
peut être raccourcieint*a
.for(a=0;n=abs(n);
place den=n<0?-n:n;for(a=0;n;
J , 17 octets
Essayez-le en ligne!
Explication:
la source
JavaScript (SpiderMonkey) , 68 octets
Merci pour @Arnauld de me rappeler à nouveau que SpiderMonkey utilise un tri stable, donc -4 octets pour la suppression
||-1
.Essayez-le en ligne!
JavaScript (Node.js) , 72 octets
Essayez-le en ligne!
la source
Java (JDK) , 98 octets
Essayez-le en ligne!
Explication
Remarque:
J'avais besoin d'un moyen de mapper des nombres sur
0/1
ou0/-1
.indexOf
a la belle propriété qu'il revient constamment-1
pour les caractères non trouvés.-1
décalé vers la droite par un nombre est toujours-1
. Tout nombre positif décalé vers la droite d'un nombre suffisamment grand produira toujours0
.Donc nous en sommes là:
la source
>>9
au lieu de en>>32
raison de la plage limitée des nombres.Ruby , 55 octets
Essayez-le en ligne!
la source
Perl 5
-nl
, 68 octetsEssayez-le en ligne!
la source
Julia 1.0 , 50 octets
Essayez-le en ligne!
la source
APL (NARS), 366 caractères, 732 octets
Pour l'opérateur qsort, c'est une traduction en APL d'algo page 139 K&R Linguaggio C. Je pense qu'il y utilise des données comme C avec des pointeurs ... Test
la source
Powershell, 44 octets
Script de test:
Sortie:
la source
PHP,
87 8684 octetsCourez avec
-nr
ou essayez-le en ligne .Remplacez
++$i
par$argc
(+1 octet) pour supprimer l'avis (et le rendre-n
obsolète).panne
-
est "plus petit" que les chiffres, il n'a donc aucun effet sur le tri.la source
Lisp commun, 88 octets
Essayez-le en ligne!
Bon vieux Lisp commun bavard!
Explication:
la source
C # (Visual C # Interactive Compiler) ,
7574 octets-1 merci @ ASCII uniquement
Essayez-le en ligne!
En C #, les chaînes sont considérées comme des "énumérables" de caractères. J'utilise cela à mon avantage en convertissant d'abord chaque numéro en une chaîne. LINQ est ensuite exploité pour obtenir les caractères uniques (chiffres) triés dans l'ordre inverse. Je reconvertis chaque tableau de caractères trié en une chaîne et l'utilise comme clé de tri pour ordonner la liste entière.
la source
-
, on dirait que l'ordre de ceux-ci n'a pas vraiment d'importance?-
, le cas de test n ° 2 renvoie... 321 2132 ...
ce qui semble incorrect?