Inspiré de cette question Stack Overflow: Tri d'une liste: chiffres en ordre croissant, lettres en ordre décroissant . Votre tâche consiste à résoudre le problème suivant et, comme il s'agit de code-golf , vous devez le faire en aussi peu d'octets que possible.
Vous devez prendre une liste d'objets en entrée contenant des lettres (toute forme raisonnable: string
, char
, etc.) et des chiffres. Vous devez ensuite trier les chiffres dans l'ordre croissant et les lettres dans l'ordre décroissant. Cependant, vous devez conserver les lettres dans les positions des lettres et les chiffres dans les positions des nombres. Par exemple, si la liste est:
[L, D, L, L, D, L]
La liste de sortie doit être sous la forme de:
[L, D, L, L, D, L]
Se sortir de
Contribution: ['a', 2, 'b', 1, 'c', 3]
- Triez les nombres par ordre croissant:
[1, 2, 3]
- Trier les lettres par ordre décroissant:
['c', 'b', 'a']
- Rejoignez-les mais gardez la même commande:
['c', 1', 'b', 2, 'a', 3]
Règles
- La liste ne contiendra que des lettres et des chiffres.
- La liste est peut-être vide.
- La liste ne peut contenir que des lettres ou uniquement des chiffres.
- Si votre langue ne prend pas en charge les tableaux de types mixtes, vous pouvez utiliser des caractères numériques au lieu de chiffres. Notez que si votre langue le prend en charge, vous devez utiliser des types mixtes.
- Les lettres ne seront que
[a-z]
ou[A-Z]
, vous pouvez choisir laquelle. - Les lettres sont triées comme
a
étant les plus basses, lesz
plus élevées c'est-à-direa = 1, z = 26
. - Les failles standard sont interdites.
- Les E / S peuvent être effectuées par n'importe quel moyen standard, y compris sous forme de chaîne.
Cas de test
[5, 'a', 'x', 3, 6, 'b'] -> [3, 'x', 'b', 5, 6, 'a']
[ 3, 2, 1] -> [ 1, 2, 3 ]
[ 'a', 'b', 'c' ] -> [ 'c', 'b', 'a' ]
[] -> []
[ 2, 3, 2, 1 ] -> [1, 2, 2, 3]
Comme il s'agit de code-golf, la réponse la plus courte en octets gagne!
la source
Réponses:
Rétine , 10 octets
Essayez-le en ligne!
La
O
scène de la rétine peut effectuer directement le type de tri sélectif requis par ce défi.Ici, la première ligne trie les chiffres tandis que la deuxième ligne trie les non-chiffres à l'envers.
la source
Python 2 ,
5352 octets-2 octets grâce à g.rocket
-1 octets grâce à Jonathan Frech
Essayez-le en ligne!
La
sorted
liste aura d'abord les nombres puis les caractères comme[3, 5, 6, 'a', 'b', 'x']
, puise<x
filtrera ce qui est nombre et ce qui est char, en python tout nombre est inférieur à une liste (entrée) et une liste est inférieure à une chaîne.la source
IndexError: pop index out of range
. L'ancienne solution a fonctionné.1-(e<'`')
devrait être(e<'`')-1
. Vous venez de les placer dans le mauvais ordre. BTW, vous me ninja: / J'ai eu celae>x
APL (Dyalog) ,
2726 octetsAttend que les caractères soient en majuscules
Essayez-le en ligne!
Ce ne sont que deux applications du formulaire
f@g
, appliquez la fonctionf
sur les éléments indiqués parg
.Pour la première utilisation de l' application nous:
f
:⍒⊃¨⊂
les notes descendantes (⍒
) chaque choix (⊃¨
) de l'argument entier (⊂
).g
:(e←∊∘⎕A)
membres (∊
) de (∘
) l ' A lphabet (⎕A
), et stockent (←
) cette fonction commee
.Pour la deuxième utilisation de l' application nous:
f
:⍋⊃¨⊂
les notes ascendantes (⍋
) chaque choix (⊃¨
) de l'argument entier (⊂
).g
:(~e)
not (~
) membres de l'alphabet (e
; la fonction que nous avons stockée auparavant)la source
83=⎕DR¨⍵
3=10|⎕DR
pour des entiers?⌊0.1×⎕DR
vous donne le nombre de bits utilisés pour représenter chaque scalaire, à l'exception des pointeurs, qui dépendent de l'architecture mais sont toujours 326. Ainsi, tous les nombres le sont2|⎕DR
.JavaScript (ES6),
715147 octetsEnregistré 20 octets en utilisant simplement
sort()
, comme suggéré par @JustinMarinerEnregistré 4 octets supplémentaires grâce à @CraigAyre
En utilisant une approche similaire à celle de Rod's Python :
Cas de test
Afficher l'extrait de code
la source
sort
train de manquer quelque chose ou ne pouvez-vous pas supprimer toute la fonction et l'utilisersort()
seule? Il semble trier de la même manière sans fonction (dans Chrome / FF / Edge).sort()
échouerait. Mais comme nous sommes limités aux chiffres, vous avez raison: cela fonctionne. Merci!a.sort()
chaque boucle au lieu de l'attribuer àx
:.map(n=>a.sort()[1/n?'shift':'pop']())
+n
pouvez utiliser à la place de1/n
R ,
8376 octets-7 octets grâce à Miff
C'est la même chose que ci-dessous, mais cela permet une entrée de type mixte en tant que
list
plutôt que comme unatomic
vecteur (ce qui transcrirait tout en caractères de types mixtes).Essayez-le en ligne!
R ,
6861 octets-7 octets grâce à Miff
Fonction anonyme. Dans ce cas, tous les chiffres sont convertis en caractères.
n[-d]
est le tableau sans les chiffres. RenvoieNULL
(liste vide) sur une entrée vide.Essayez-le en ligne!
la source
d=n%in%0:9
Japt ,
1815 octetsMerci @Shaggy pour -3 octets et pour l'aide à la correction des tableaux avec
0
s.La première ligne est intentionnellement laissée en blanc.
Essayez-le en ligne! à l'aide de
-Q
pour afficher le tableau formaté.Explication
La première ligne est vide pour éviter d'écraser le tableau d'entrée.
[5, 'a', 'x', 3, 6, 'b']
Faites une copie en aplatissant (
c
) le tableau d'entrée, puis triez (ñ
) avec les chaînes représentées par leur code de caractère (c
). Ceci est stocké dansV
.[3, 5, 6, 'a', 'b', 'x']
Puis mappez le tableau d'entrée par la fonction ...
Transformez les nombres en chaînes binaires (véridiques) ou en chaînes
""
(fausses) (¤
). Si c'est vrai, supprimez-le du début deV
(v
), sinon supprimez-le de la fin (o
).la source
Vo
et de vousVv
déplacer. Je suis convaincu qu'il doit y avoir un chemin plus court, sans ternaire.o
je pouvais retirer du début avec des valeurs négatives ou quelque chose ...JavaScript,
164162158142 octetsmodifier 1: 2 octets de moins après avoir supprimé une affectation redondante de v.
éditez 2: 4 octets de moins grâce à TheLethalCoder.
modifier 3: 16 octets de moins grâce aux astuces brillantes de Justin Mariner
C'est ma toute première fois en code-golf, donc ça peut sûrement être amélioré ... Mais ça vaut quand même la peine d'essayer.
Le programme effectue une variante de tri par sélection, qui ne prend en compte que les valeurs du même type que la valeur courante (en échangeant uniquement un chiffre et un chiffre, ou une lettre et une lettre)
Forme lisible:
la source
for(j=i+1;j<l;j++)
->for(j=i++;++j<l;)
et supprimez l'incrément dans la boucle extérieure.j
comme je l'ai suggéré, je ne vous ai pas vu utiliseri
plus bas juste changerx[i]=x[m]
aussix[i++]=x[m]
x[i++]=x[m]
... Merci!C ++ 17 (gcc) , 219 octets
Essayez-le en ligne!
Peu compétitif. Mais je dois prendre en charge les tableaux de type mixte? BIEN.
Accepte un tableau de variantes dans un style de plage et le modifie sur place. Copie l'entrée dans deux ensembles triés, puis de nouveau dans le tableau d'entrée / sortie.
la source
void *
en C;) Mais, oui, intéressant de voir une solution sauter à travers un tel cerceau.#include
sMathematica, 203 octets
Essayez-le en ligne!
la source
Gelée , 14 octets
Essayez-le en ligne!
Fondamentalement, un portage de la solution Python de Rod .
la source
Pyth ,
1211 octetsEssayez-le en ligne! ou Essayez la suite de tests.
Explication
la source
Python,
145139130 octets6 octets économisés grâce à @officialaimm
9 octets enregistrés grâce à @Chris_Rands
Essayez-le en ligne!
la source
type(x)==str
économiserait quelques octets sur l'utilisationisinstance(...)
je pense05AB1E , 17 octets
Essayez-le en ligne!
L'utilisation de la fermeture de tri était en fait pire:
Σ©Ç®ai0<*}}¹SaJsvyay.;
la source
Python 3, 77 octets
Cette réponse est basée sur le commentaire qui dit que vous pouvez utiliser «1», «2», etc. si les caractères et les chiffres ne sont pas comparables dans la langue. 'a' et 1 ne sont pas comparables en Python 3.
la source
q / kdb +,
5453 octetsSolution:
Exemples:
Explication:
Trouver les caractères dans la liste, trier par ordre décroissant, trouver les longs dans la liste, les trier par ordre croissant, joindre pour obtenir une liste de, par exemple
("x";"b";"a";3;5;6)
, puis attribuer les valeurs triées à leurs positions d'origine dans la liste, par exemple à0 3 4 1 2 5
.Le golf consiste simplement à remplacer q mots clés (
each
,where
etnot
) par leurk
équivalent (ce qui nécessite qu'ils soient placés entre crochets).Modifications
desc
la source
C (gcc) ,
125113110 octetsEssayez-le en ligne!
Expliqué:
Les lettres sont attendues en majuscules.
la source
PHP, 66 octets:
prend l'entrée des arguments de la ligne de commande, imprime une chaîne. Courez avec
-nr
ou essayez-le en ligne .Donne un avertissement en PHP 7.1; remplacer
a&
par""<
pour corriger.la source
Mathematica, 107 octets
la source
C # (.NET Core) , 171 octets
Le nombre d'octets comprend également:
Essayez-le en ligne!
Explication:
la source
Perl 5 , 107 + 1 (-n) = 108 octets
Essayez-le en ligne!
la source
Rubis , 265 octets
Essayez-le en ligne!
Première minuterie ici, ma solution n'est certainement pas la meilleure. Mais comme c'est ma première réponse, j'ai pensé en publiant juste pour le plaisir.
Regarder plus loin pour voir de meilleures réponses Ruby, pour voir quelle est la meilleure approche. J'espère que je m'améliorerai dans les réponses futures =)
Lisible
la source
Haskell, 108 octets
Il peut y avoir des moyens plus courts, mais je devais juste l'essayer avec la
Lens
bibliothèque.Je pourrais définir
f
simplement la composition des deuxi
invocations, mais je devrais quand même y appliquerx
pour éviter une erreur de type de la restriction du monomorphisme. Notez que le type def
estTraversable t => t Char -> t Char
ainsi il peut être utilisé avecString
s qui sont des listes deChar
s ainsi qu'avec des tableaux deChar
s.Voici les cas de test:
la source
Python 3, 91 octets
la source
Clojure, 151 octets
Exemple:
Cette cumulative calcule la
sommecomptage des nombres entiers et des caractères, et l' utilise pour rechercher l'élément correct à partir d' une liste triée des correspondants les éléments de types.la source
APL (Dyalog) , 26 octets
(utilise
⎕IO=1
)Essayez-le en ligne!
la source