Contribution:
- Un tableau contenant trois entiers:
0
,1
et2
dans un ordre quelconque ( par exemple[2, 0, 1]
) - Et une chaîne de longueur> = 2 contenant uniquement des lettres alphabétiques (à la fois minuscules et majuscules) et des chiffres (c'est-à-dire
a1B2c3
)
Sortie:
Sur la base du tableau, nous trions et sortons la chaîne.
Comment cela marche-t-il?
- Le tableau indique l'ordre de priorité de
a-z
,A-Z
et0-9
, le premier étant0
; deuxième être1
; et troisième être2
. - Les caractères individuels de la chaîne peuvent ensuite être classés en fonction de cela.
Exemple:
- Tableau:
[2, 0, 1]
- Chaîne:
a1B2c3
Sur la base du tableau, nous savons que notre priorité de commande est 0-9a-zA-Z
.
Sur cette base, nous pouvons convertir et afficher la chaîne: 123acB
.
Règles du défi:
- Pour le tableau, vous pouvez choisir d'utiliser une entrée indexée 0 ou 1 indexée. Il en
[3, 1, 2]
va de même pour une entrée valide si vous préférez utiliser des tableaux indexés 1. - La chaîne (entrée et sortie) ne contient que des caractères valides:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
. - Si votre langue ne prend pas en charge les tableaux (ou si vous le souhaitez), vous êtes libre d'utiliser des chaînes au lieu des tableaux pour le premier paramètre (c'est
012
-à- dire[0,1,2]
, etc.).
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, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés, des programmes complets. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test:
[2, 0, 1] & a1B2c3 -> 123acB
[2, 1, 0] & aAaA909UuHWw9gh2 -> 02999AAHUWaaghuw
[2, 1, 0] & 6Bx43 -> 346Bx
[1, 0, 2] & jfjf33g -> ffgjj33
[0, 2, 1] & AbC13 -> b13AC
[1, 2, 0] & Qfl0l -> Q0fll
[0, 1, 2] & 9870abcABC -> abcABC0789
[0, 2, 1] & test123 -> estt123
[2, 0, 1] & WHAT -> AHTW
[2, 0, 1] & WhAt -> htAW
[1, 0, 2] & 102BACbac -> ABCabc012
code-golf
string
array-manipulation
sorting
Kevin Cruijssen
la source
la source
"123"
un format valide pour le premier paramètre?123
,012
,[0,1,2]
,[0, 1, 2]
,0;1;2
ou celui que vous préférez.Réponses:
05AB1E ,
151412 octetsCode:
Explication:
Utilise l' encodage CP-1252 . Essayez-le en ligne! .
la source
²
et en utilisant₂
au lieu de26
.Python 2,
6766 octetsTestez-le sur Ideone .
la source
JavaScript (ES6), 87 octets
Si le tableau d'entrée a donné l'ordre, plutôt que la priorité, des trois plages (cela ne fait qu'une différence pour
[1, 2, 0]
et[2, 1, 0]
dont les effets sont échangés), cela aurait fonctionné pour 80 octets:J'ai mal lu la question et j'ai quand même reçu 7 votes positifs. N'hésitez pas à supprimer vos votes positifs et à les donner à @CharlieWynn à la place, qui a proposé la meilleure correction à mon approche.
la source
Array.sort
le paramètre de fonction optionnel de mais cela fonctionne mieux.Gelée , 13 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
Pyth,
171615 octetsSuite de tests.
Merci à @FryAmTheEggman pour un octet et @Jakube pour un autre!
la source
'UT
place des'MT
.'UT
c'est une erreur et`UT
ne donne pas la même chaîne.Javascript es6 77 octets
la source
?
s à chaque expression régulière, cela garantit que la correspondance renvoie des résultats (principalement des chaînes vides, mais elles disparaissent quand même), évitant(||[])
ainsi, vous économisant ainsi 3 octets au total.TSQL,
199191 octetsGolfé:
Non golfé:
Violon
la source
APLX , 19 octets
⎕a⎕A⎕D
chiffres supérieurs inférieurs(
…)[a]
Réorganiser selon le tableau a∊
aplatir(
…)⍋s
Selon cet "alphabet", donnez les indices qui trieraient la chaîne ss[
… L']
utiliser pour réorganiser sla source
⎕a
, car c'est un nom de quadruple sensible à la casse. Beaucoup mieux (pour le golf et en général) ce pour quoi je fais du lobbying; pour obtenir⌈
et⌊
pour plier la casse sur les données de caractères, comme dans K. Ensuite, nous aurons à la⌊⎕A
place de⎕a
.Python 2, 121 octets
la source
Clojure, 74 octets
Pour chaque valeur de la première liste, obtient l'expression régulière appropriée et l'applique à la chaîne d'entrée. Le résultat est une liste de listes de symboles qui correspondent à l'expression régulière. Triez ensuite chacun et concatène le résultat en une seule liste et transformez-le en chaîne.
Vous pouvez le voir en ligne ici: https://ideone.com/dqAkxg
la source
Rétine ,
4339 octetsLe nombre d'octets suppose un codage ISO 8859-1. Le saut de ligne arrière est important.
L'entrée devrait être l'ordre de tri sous la forme d'une liste de base zéro sans délimiteurs sur la première ligne, et la chaîne à trier sur la deuxième ligne, par exemple
Essayez-le en ligne!
Explication
Je vais utiliser l'exemple d'entrée ci-dessus pour vous guider dans le code:
Étape 1: substitution
Le regex lui-même est juste
.
(correspond à tout caractère non saut de ligne), qui est entouré de!..."
. Cependant, l'2=
est une limite indiquant Retina d'appliquer la substitution seulement au deuxième match de la regex. Nous obtenons donc ceci:Étape 2: translittération
Une étape de translittération effectue simplement une substitution caractère par caractère. Le
¶
représente un saut de ligne et sed
développe en0123456789
(bien que nous puissions ignorer tous les chiffres après2
). Cela signifie que cette translittération correspond au mappage suivant:À
04
l'avant sont deux limites, qui ensemble indiquent que seuls les quatre premiers caractères de cet ensemble doivent être translittérés. Il se trouve que ce sont les chiffres sur la première ligne, ainsi que le saut de ligne séparant les deux lignes, nous obtenons donc ceci:Au début de la chaîne, nous avons maintenant trois paires de ces caractères:
Notez que les seconds caractères des paires sont simplement dans leur ordre ASCII normal (et seront toujours les mêmes). Nous les utiliserons plus tard pour trier les groupes de caractères dans l'entrée principale dans l'ordre requis.
Les premiers caractères sont un peu plus intéressants: leur signification est celle qui
%
précède les chiffres du tableau ASCII,@
qui précède les lettres majuscules (mais après les chiffres) et^
qui précède les lettres minuscules (mais après les lettres majuscules). Cela nous aidera à regrouper les marqueurs de position (c'est-à-dire le deuxième caractère de chaque paire) avec le bon ensemble de caractères.Étape 3: trier
Il s'agit d'une étape de tri simple. Il correspond à deux caractères si le premier n'est pas un caractère de mot (correspondant ainsi aux trois paires dont je viens de parler) ou à un seul caractère sinon (correspondant à chaque caractère de l'entrée principale individuellement), et trie ces chaînes. Cela a deux objectifs: il ramène les personnages de chaque groupe dans le bon ordre (et comme le tri est stable, cet ordre ne sera pas gâché à l'étape suivante), et en raison des
%@^
marqueurs, il insère les paires dans le bonnes positions:Étape 4: trier
Cette étape trie toutes les correspondances de l'
.\w+
expression rationnelle qui, en raison de la cupidité, correspond à un marqueur de position (c'est-à-dire l'un des!"#
) avec tous les caractères de mot après. Autrement dit, il trie ces trois chaînes, dont l'ordre est déterminé uniquement par le caractère marqueur:"24! BOR #afo
Bien que cela mélange ces marqueurs (tout en laissant les trois autres marqueurs en place), plus important encore, il apporte les chiffres et les lettres dans le bon ordre:
Étape 5: Substitution
Tout ce qui reste est un petit nettoyage, où nous supprimons tous les marqueurs en les faisant correspondre et en les remplaçant par rien.
la source
JavaScript (ES6), 65
Remarque: l'ordre ASCII «naturel» est 0-9, AZ, az, ce qui est juste l'opposé de l'OP 0,1,2. Alors
la source
Haskell,
6263 octetsExemple d'utilisation:
"cD12ab" # [2,0,1]
->"12abcD"
.Comment ça marche:
Edit: @Christian Sievers a trouvé un bug. Merci! Correction d'un octet supplémentaire.
la source
Stax , 15 octets
Exécutez-le et déboguez-le en ligne
Cette soumission de 15 octets est regroupée dans une variante du jeu de caractères CP437. La représentation ascii correspondante prend 18 octets:
Je suis sûr que cela peut être encore réduit.
VlVd+
peut également êtreVLA|(
, qui tourne à gauche le0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
par dix elemenets. Le code entier peut également êtreVlVd+26/,e@:f,{[Io
, qui lit la pile d'entrée deux fois au lieu de les lire toutes au début dans la pile principale, et utilise un format d'entrée différent (plus traditionnel), comme indiqué dans ce document .la source
Dyalog APL , 22 octets
(819⌶⎕A)
plier l'alphabet majuscule en minuscule(
…)⎕A⎕D[a]
Chiffres supérieurs inférieurs réorganisés selon le tableau a∊
aplatirs⍋⍨
pour la chaîne s , obtenez les indices qui trieraient s selon cet "alphabet"s[
… L']
utiliser pour réorganiser sla source
PowerShell v2 +, 107 octets
J'explore des algorithmes utilisant des expressions rationnelles, mais jusqu'à présent, ils semblent tous plus longs.
Prend l'entrée comme un tableau explicite
$n
(voir les exemples ci-dessous) et une chaîne$s
qui est immédiatement convertie en un tableau de caractères. Nous construisons ensuite trois éléments d'un nouveau tableau dynamique, chacun d'eux encapsulé avec un-join
:-
(($s=$s|sort)|?{$_-ge97})
-
($s|?{$_-in65..96})
-
($s|?{$_-lt58})
Le premier que nous prenons
$s
et le parcouronsSort-Object
. Heureusement, puisque nous l'avons déjà converti en tableau de caractères, c'est un tri sensible à la casse. Cela est réenregistré dans$s
puis redirigé vers unWhere-Object
avec une clause supérieure à97
(c'est-à-dire ASCII en minusculesa-z
). Le deuxième est pourA-Z
et le troisième pour0-9
.Ainsi, nous avons maintenant un tableau de chaînes, où chaque chaîne est composée d'un des trois types de caractères et est triée. Nous découpons cela avec
[$n]
puis-join
le résultat ensemble pour former notre chaîne de sortie finale. Cela reste sur le pipeline et l'impression est implicite.Cas de test
la source
Rubis, 56 octets
Porté à partir de la réponse @Dennis.
Une solution alternative de 58 octets que j'aime mieux, inspirée de @Neil et légèrement modifiée de sa réponse.
Essayez l'une des versions en ligne! (la version commentée est la solution alternative)
la source
Code machine x86 32 bits, 70 octets
En hex:
Cette procédure s'attend à ce que l'ordre de tri des classes de caractères soit une chaîne terminée par NULL de 3 caractères (0..2)
ESI
et la chaîne à trierEDI
. Le tri est effectué sur place à l'aide d'une version extrêmement sous-optimale (en termes de performances) du tri à bulles.la source
Emacs Lisp, 183 octets
Légèrement plus court que Java ...
la source
Clojure, 77 octets
Pas aussi court que celui
re-seq
basé, et je n'arrivais pas à comprendre comment exprimer cela "(apply str(mapcat sort(map(...))))
" dans moins d'espace.group-by
crée une table de hachage qui peut être utilisée en tant que fonction, lorsqu'elle est interrogée avec un ingeger entre 0 et 2, elle renvoie le groupe correspondant, cela ordonne les trois classes de caractères différentes.Ce serait plus compact que la
re-seq
solution s'il y avait plus de classes de caractères à gérer car cela ne prend que 5 caractères / groupe supplémentaires57 1,
au lieu de 8 pour l'expression comme#"[a-z]"
.la source
Python 2,
14011710110099 octetsTout le monde dit "Ewww!". Au moins c'est lisible ... toux pas vraiment toux
Essayez-le en ligne
la source
R , 101 octets
Crée un vecteur avec az, AZ et 0-9 dans l'ordre donné et réorganise les caractères de la chaîne d'entrée pour correspondre à cet ordre.
Essayez-le en ligne!
la source
J, 40 octets
la source
Java 8,
221212193156 octetsJe devrais bien sûr essayer de répondre à mon propre défi également. :) (Et comme d'habitude en Java.)
-28 octets enregistrés grâce à @cliffroot .
Explication:
Essayez-le ici.
la source
[^a-z]
[^A-Z]
[^0-9]
et vous pouvez utiliser à lagetBytes()
place detoCharArray()
^
(pas) était assez stupide ..;)replaceAll
appels répétitifsString c(int[]a,String z){String r[]={"[^a-z]","[^A-Z]","[^0-9]"},o="";for(byte c[],i=0;i<3;){c=z.replaceAll(r[a[i++]],"").getBytes();java.util.Arrays.sort(c);o+=new String(c);}return o;}