Étant donné une clé et un tableau de chaînes, mélangez le tableau afin qu'il soit trié lorsque chaque élément est XOR avec la clé.
XOR'ing deux cordes
Pour XOR une chaîne par une clé, XOR chacune des valeurs de caractère de la chaîne par sa paire dans la clé, en supposant que la clé se répète pour toujours. Par exemple, abcde^123
ressemble à:
a b c d e
1 2 3 1 2
--------------------------------------------
01100001 01100010 01100011 01100100 01100101
00110001 00110010 00110011 00110001 00110010
--------------------------------------------
01010000 01010000 01010000 01010101 01010111
--------------------------------------------
P P P U W
Tri
Le tri doit toujours être fait lexicographiquement des chaînes XOR. C'est,1 < A < a < ~
(en supposant un codage ASCII)
Exemple
"912", ["abcde", "hello", "test", "honk"]
-- XOR'd
["XSQ]T", "QT^U^", "MTAM", "Q^\R"]
-- Sorted
["MTAM", "QT^U^", "Q^\R", "XSQ]T"]
-- Converted back
["test", "hello", "honk", "abcde"]
Remarques
- La clé aura toujours au moins 1 caractère
- La clé et l'entrée ne seront constituées que d'ASCII imprimables.
- Les chaînes XOR peuvent contenir des caractères non imprimables.
- L'entrée et la sortie peuvent être effectuées à l'aide des méthodes raisonnables
- Failles standard sont interdites.
- Vous pouvez prendre la clé et l'entrée dans n'importe quel ordre.
Cas de test
key, input -> output
--------------------
"912", ["abcde", "hello", "test", "honk"] -> ["test", "hello", "honk", "abcde"]
"taco", ["this", "is", "a", "taco", "test"] -> ["taco", "test", "this", "a", "is"]
"thisisalongkey", ["who", "what", "when"] -> ["who", "what", "when"]
"3", ["who", "what", "when"] -> ["what", "when", "who"]
Il s'agit de code-golf , donc le moins d'octets gagne!
Réponses:
Gelée ,
97 octetsMerci à @EriktheOutgolfer pour une suggestion qui a permis d'économiser 2 octets!
Essayez-le en ligne!
Comment ça fonctionne
la source
Python 3 ,
7573 octetsCela trie la liste x sur place.
Merci à @mercator pour avoir joué au golf sur 2 octets!
Essayez-le en ligne!
Version alternative, 62 octets
Cela prend l'entrée sous forme de chaînes d'octets, ce qui peut ne pas être autorisé.
Essayez-le en ligne!
la source
x.sort(key=...)
.Haskell, 77 octets
Trop d'importations.
Essayez-le en ligne!
la source
Rubis , 61 octets
Essayez-le en ligne!
la source
Clean ,
10110094 octets-6 octets grâce à Ourous!
Essayez-le en ligne! Exemple d' utilisation:
s ['3'] [['who'], ['what'], ['when']]
.Non golfé:
la source
? =toInt
et l'utilisation à la?
place économise 2 octets, et l'utilisation d'un inversé supérieur à au lieu de inférieur ou égal en enregistre un autre.En fait , 24 octets
Essayez-le en ligne!
Explication:
la source
["who", "what", "when"]
et"thisisalongkey"
Perl 6 , 37 octets
Essayez-le en ligne!
$^a
et@^b
sont respectivement les arguments clé et tableau de la fonction.@^b.sort(...)
trie simplement le tableau d'entrée en fonction de la fonction de prédicat qui lui est donnée. Cette fonction prend un seul argument, doncsort
elle lui transmettra donc chaque élément à tour de rôle et traitera la valeur de retour comme une clé pour cet élément, en triant la liste en fonction des clés des éléments.La fonction de tri est
*.comb Z~^ (|$^a.comb xx *)
.*
est l'argument chaîne unique de la fonction.*.comb
est une liste des caractères individuels de la chaîne.|$^a.comb xx *
est une liste des caractères de la clé de tri xor, répliqués à l'infini. Ces deux listes sont zippées ensemble (Z
) à l'aide de l'opérateur xor en chaîne (~^
). Puisque le prédicat de tri renvoie une clé de tri qui est une liste,sort
ordonne deux éléments en comparant les premiers éléments des listes renvoyées, puis les seconds si les premiers éléments sont les mêmes, et cetera.la source
{sort *.comb »~^»$^a.comb,@^b}
C (gcc) ,
132128126 octetsPrend un nombre d'arguments et un pointeur vers un tableau de chaînes (la clé, suivie des chaînes à trier) et modifie le tableau de chaînes sur place.
Le code est hautement non portable et nécessite des pointeurs 64 bits, gcc et glibc.
Merci à @ceilingcat d'avoir joué au golf sur 2 octets!
Essayez-le en ligne!
la source
Python 2,
204 140 134 134126 octetsMerci à @Mr. Xcoder pour avoir économisé 64 octets, grâce à @ovs pour avoir économisé six octets, et merci à @Dennis pour avoir économisé huit octets!
Essayez-le en ligne!
la source
Opcode x86, 57 octets
Code de test:
la source
JavaScript ES 6,
1139795 octetsJavaScript est long à coder ...
Pour [0,65536) + 1e4 tous les 5 chiffres peuvent donc être comparés comme une chaîne
la source
k+=k
au lieu dep=k+p
mais trop de mémoire en utilisant avec le petit cas de testPerl 5, 88 octets
Essayez-le en ligne .
la source
Clojure, 80 octets
la source
Perl 5,
80 + 3 (, 67 octetsanl
) = 83essayez-le en ligne
la source
9
;abcdeabcde abcdeabcdz
(devrait donnerabcdeabcdz abcdeabcde
)AWK ,
285284 octetsEssayez-le en ligne!
Accepte les entrées sous la forme,
key word word ...
par exemple,912 abcde hello test honk
Produit des mots triés séparés par des espaces
Légèrement plus lisible
la source
Facteur, 85
Essayez d'abord, je vais voir si je peux jouer au golf demain.
J'accepte les suggestions;)
la source
Dyalog APL, 34 octets
Dfn, utilise ⎕ml 3
la source