Étant donné une liste de chaînes, sortez une chaîne unique formée en prenant un caractère de chaque chaîne à chaque position, en les triant par ordinal ASCII et en les ajoutant dans l'ordre à la chaîne de sortie. En d'autres termes, pour n
les chaînes d'entrée, les premiers n
caractères de la sortie seront les premiers caractères de chacune des entrées triées par ordinal, les seconds n
caractères de la sortie seront les seconds caractères de chacune des entrées triées par ordinal, etc. sur. Vous pouvez supposer que les chaînes sont toutes de longueur égale et qu'il y aura au moins une chaîne. Toutes les chaînes seront composées uniquement de caractères imprimables ASCII (ordinaux 32-127).
Implémentation de référence en Python ( essayez-la en ligne ):
def stringshuffle(strings):
res = ''
for i in range(len(strings[0])):
res += ''.join(sorted([s[i] for s in strings],key=ord))
return res
Exemples:
"abc","cba" -> "acbbac"
"HELLO","world","!!!!!" -> "!Hw!Eo!Lr!Ll!Od"
Règles
- Les failles standard sont interdites
- Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte
Classement
L'extrait de pile au bas de cet article génère le classement à partir des réponses a) en tant que liste des solutions les plus courtes par langue et b) en tant que classement général.
Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle de démarque suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 64526; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 45941; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Pyth, 5 octets
Zips (
C
) l'entrée (Q
),M
apsS
ort, puiss
ums.Essayez-le en ligne .
la source
TeaScript , 9 octets
TeaScript a tous les bons intégrés implémentés de toutes les mauvaises manières.
Essayez-le en ligne
Non golfé
Explication
la source
CJam, 5 octets
Essayez-le ici .
la source
Python,
5048 octetsMerci à @xnor pour -2 octets!
la source
"".join
dans une variable.JavaScript (ES6), 57 octets
la source
Octave, 15 octets
Exemple:
la source
Julia, 46 octets
Cela crée une fonction sans nom qui accepte un tableau de chaînes et renvoie une chaîne. Pour l'appeler, donnez-lui un nom, par exemple
f=x->...
.Non golfé:
la source
Minkolang 0,13 , 46 octets
Essayez-le ici. Attend une entrée comme
"HELLO""world""!!!!!"
(donc pas de virgules).Explication
la source
GolfScript, 8 octets
Essayez-le en ligne sur Web GolfScript .
Comment ça fonctionne
la source
K, 10 octets
Joignez (
,/
) le type de ({x@<x}
) chacun ('
) de la transposition (+
) d'une liste de chaînes.En action:
Simple, mais K est un peu blessé ici en n'ayant pas de fonction de tri à un seul caractère et en divisant plutôt l'opération en un opérateur d'index de dispersion-collecte
@
et une primitive qui donne le vecteur de permutation qui trierait une liste<
.la source
C ++ 14, 152 octets
Ne pas utiliser d'avantage de carte + zip (devinez pourquoi)
Ungolfed + usage
la source
Mathematica, 51 octets
La manipulation des chaînes dans Mathematica coûte cher ...
la source
Japt , 12 octets
20Essayez-le en ligne!
Explication
la source
PHP ,
9291 octetsEssayez-le en ligne!
Je suis convaincu que cela pourrait être fait plus rapidement en n'essayant pas d'utiliser les fonctions de tableau intégrées de PHP, mais j'ai dû essayer!
Ou 85 octets
Le swing de Night2, raccourci en n'essayant pas d'utiliser les fonctions de tableau intégrées de PHP:
Essayez-le en ligne!
la source
array_column
cela ne fonctionne pas sur un tableau de chaînes, sinon ce serait un peu plus utile pour CG. Et bien sûr, devoir sauter$argv[0]
est toujours aussi une douleur ...Clojure / ClojureScript, 43 octets
Crée une fonction anonyme. Écrit dans un ClojueScript REPL, devrait également être un Clojure valide.
Entrez-le ici , puis appelez via
(*1 ["HELLO" "world" "!!!!!"])
. Ou faites(def f *1)
, puis utilisez(f ["abc" "cba"])
.la source
Ceylan, 166
String z(String+l)=>String(expand(t(l).map(sort)));[T+]n<T>(T?+i)=>[for(e in i)e else nothing];{[X+]*}t<X>([{X*}+]l)=>l[0].empty then{}else{n(*l*.first),*t(l*.rest)};
Alors que Ceylan a une
zip
fonction , il ne prend que deux itérables au lieu d'un itérable d'entre eux.unzip
, en revanche, prend un itérable de tuples, et je ne veux pas convertir mes chaînes en tuples. J'ai donc implémenté ma propre fonction de transposition, inspirée d'une implémentation Haskell que Google m'a trouvée quelque part .Les types de
n
ett
pourraient être définis beaucoup plus généraux, mais c'est Codegolf ;-) (n
est un cas particulier de ce que j'ai proposé il y aassertNarrow
deux semaines ).la source
Perl 6 , 33 octets
Exemple d'utilisation:
la source
𝔼𝕊𝕄𝕚𝕟, 15 caractères / 30 octets
Try it here (Firefox only).
Je viens de réaliser que la fonction sortBy de Lodash fonctionne également sur les chaînes.
la source
Gelée , 3 octets
Essayez-le en ligne!
Valable uniquement s'il est considéré comme un programme complet : la valeur résultante est une liste de chaînes, mais lorsqu'elle est imprimée, Jelly l' aplatit implicitement .
la source
Stax , 5 octets
Si proche de LMNOP :(
Exécutez-le et déboguez-le sur staxlang.xyz!
Mettez toutes les entrées dans une liste de chaînes (
L
) et transposez cette liste (M
). Pour chaque chaîne résultante (F
), triez-lao
et affichez-lap
.la source