Dada uma lista de cadeias, produza uma única cadeia formada pegando um caractere de cada cadeia em cada posição, classificando-as por ordinal ASCII e anexando-as em ordem à cadeia de saída. Em outras palavras, para n
cadeias de entrada, os primeiros n
caracteres da saída serão os primeiros caracteres de cada uma das entradas classificadas por ordinal, os segundos n
caracteres da saída serão os segundos caracteres de cada uma das entradas classificadas por ordinal, e assim em. Você pode supor que as strings são todas do mesmo comprimento e que haverá pelo menos uma string. Todas as seqüências de caracteres serão compostas apenas por caracteres imprimíveis ASCII (ordinais 32-127).
Implementação de referência em Python ( experimente online ):
def stringshuffle(strings):
res = ''
for i in range(len(strings[0])):
res += ''.join(sorted([s[i] for s in strings],key=ord))
return res
Exemplos:
"abc","cba" -> "acbbac"
"HELLO","world","!!!!!" -> "!Hw!Eo!Lr!Ll!Od"
Regras
- As brechas padrão são proibidas
- Isso é código-golfe , então a resposta mais curta em bytes ganha
Entre os melhores
O snippet de pilha na parte inferior desta postagem gera o cabeçalho das respostas a) como uma lista da solução mais curta por idioma eb) como um cabeçalho geral.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](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>
Pitão, 5 bytes
Fecha (
C
) a entrada (Q
),M
apsS
ort e, em seguida,s
ums.Experimente online .
fonte
TeaScript , 9 bytes
O TeaScript possui todos os recursos certos implementados de todas as maneiras erradas.
Experimente online
Ungolfed
Explicação
fonte
CJam, 5 bytes
Experimente aqui .
fonte
Pitão,
5048 bytesObrigado a @xnor por -2 bytes!
fonte
"".join
em uma variável.JavaScript (ES6), 57 bytes
fonte
Oitava, 15 bytes
Exemplo:
fonte
Julia, 46 bytes
Isso cria uma função sem nome que aceita uma matriz de cadeias e retorna uma cadeia. Para chamá-lo, dê um nome, por exemplo
f=x->...
.Ungolfed:
fonte
Tamanho 0.13 , 46 bytes
Experimente aqui. Espera entrada como
"HELLO""world""!!!!!"
(portanto, sem vírgulas).Explicação
fonte
GolfScript, 8 bytes
Experimente online no Web GolfScript .
Como funciona
fonte
K, 10 bytes
Join (
,/
) o tipo de ({x@<x}
) cada ('
) da transposição (+
) de uma lista de strings.Em ação:
Simples, mas K é prejudicado um pouco por não ter uma função de classificação de caractere único e, ao invés disso, dividir a operação em um operador de índice de dispersão
@
e uma primitiva que produz o vetor de permutação que ordenaria uma lista<
.fonte
C ++ 14, 152 bytes
Não usar nenhuma vantagem do mapa + zip (adivinhe por quê)
Ungolfed + use
fonte
Mathematica, 51 bytes
A manipulação de strings no Mathematica é cara ...
fonte
Japonês , 12 bytes
20Experimente online!
Explicação
fonte
PHP ,
9291 bytesExperimente online!
Estou confiante de que isso poderia ser feito mais curto se você não tentasse usar as funções de matriz internas do PHP, mas precisava tentar!
Ou 85 bytes
A oscilação do @ Night2, diminuída ao não tentar usar as funções de matriz incorporadas do PHP:
Experimente online!
fonte
array_column
não funcione em uma série de strings, caso contrário, seria um pouco mais útil para CG. E, claro, ter que pular$argv[0]
é sempre uma dor muito ...Clojure / ClojureScript, 43 bytes
Cria uma função anônima. Escrito em um REPL do ClojueScript, também deve ser um Clojure válido.
Digite aqui e , em seguida, ligue via
(*1 ["HELLO" "world" "!!!!!"])
. Ou faça(def f *1)
e use(f ["abc" "cba"])
.fonte
Ceilão, 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)};
Embora o Ceilão tenha uma
zip
função , são necessárias apenas duas iteráveis em vez de uma iterável.unzip
, por outro lado, utiliza iteráveis de tuplas e não quero converter minhas strings em tuplas. Então, eu implementei minha própria função de transposição, inspirada em uma implementação Haskell que o Google encontrou para mim em algum lugar .Os tipos de
n
et
poderiam ser definidos muito mais gerais, mas este é o Codegolf ;-) (n
é um caso especial do que propusassertNarrow
há duas semanas ).fonte
Perl 6 , 33 bytes
Exemplo de uso:
fonte
, 15 caracteres / 30 bytes
Try it here (Firefox only).
Acabei de perceber que a função sortBy do Lodash também funciona em strings.
fonte
Geléia , 3 bytes
Experimente online!
Válido apenas se considerado como um programa completo : o valor resultante é uma lista de strings, mas quando é impresso, o Jelly o achata implicitamente .
fonte
Stax , 5 bytes
Tão perto de LMNOP :(
Execute e depure-o em staxlang.xyz!
Coloque todas as entradas em uma lista de strings (
L
) e transponha essa lista (M
). Para cada sequência resultante (F
), ordene (o
) e imprima (p
).fonte