Dada una lista de cadenas, genere una única cadena formada tomando un carácter de cada cadena en cada posición, ordenándolas por ordinal ASCII y agregándolas en orden a la cadena de salida. En otras palabras, para las n
cadenas de entrada, los primeros n
caracteres de la salida serán los primeros caracteres de cada una de las entradas ordenadas por ordinal, los segundos n
caracteres de la salida serán los segundos caracteres de cada una de las entradas ordenadas por ordinal, y así en. Puede suponer que las cadenas son todas de igual longitud y que habrá al menos una cadena. Todas las cadenas estarán compuestas solo por caracteres imprimibles ASCII (ordinales 32-127).
Implementación de referencia en Python ( pruébelo en línea ):
def stringshuffle(strings):
res = ''
for i in range(len(strings[0])):
res += ''.join(sorted([s[i] for s in strings],key=ord))
return res
Ejemplos:
"abc","cba" -> "acbbac"
"HELLO","world","!!!!!" -> "!Hw!Eo!Lr!Ll!Od"
Reglas
- Las lagunas estándar están prohibidas
- Este es el código de golf , por lo que la respuesta más corta en bytes gana
Tabla de clasificación
El Fragmento de pila al final de esta publicación genera la tabla de clasificación a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](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 bytes
Comprime (
C
) la entrada (Q
),M
apsS
ort, luegos
ums.Pruébalo en línea .
fuente
TeaScript , 9 bytes
TeaScript tiene todas las funciones integradas correctas implementadas de manera incorrecta.
Pruébalo en línea
Sin golf
Explicación
fuente
CJam, 5 bytes
Pruébalo aquí .
fuente
Python,
5048 bytes¡Gracias a @xnor por -2 bytes!
fuente
"".join
en una variable.JavaScript (ES6), 57 bytes
fuente
Octava, 15 bytes
Ejemplo:
fuente
Julia, 46 bytes
Esto crea una función sin nombre que acepta una matriz de cadenas y devuelve una cadena. Para llamarlo, asígnele un nombre, por ejemplo
f=x->...
.Sin golf:
fuente
Minkolang 0.13 , 46 bytes
Pruébalo aquí. Espera entradas como
"HELLO""world""!!!!!"
(así que no hay comas).Explicación
fuente
GolfScript, 8 bytes
Pruébelo en línea en Web GolfScript .
Cómo funciona
fuente
K, 10 bytes
Unir (
,/
) el tipo de ({x@<x}
) cada ('
) de la transposición (+
) de una lista de cadenas.En acción:
Simple, pero K se lastima un poco aquí al no tener una función de clasificación de un solo carácter y en su lugar dividir la operación en un operador de índice de dispersión-reunión
@
y una primitiva que produce el vector de permutación que ordenaría una lista<
.fuente
C ++ 14, 152 bytes
No utilizo ninguna ventaja de map + zip (adivina por qué)
Sin golf + uso
fuente
Mathematica, 51 bytes
La manipulación de cadenas en Mathematica es costosa ...
fuente
Japt , 12 bytes
20Pruébalo en línea!
Explicación
fuente
PHP ,
9291 bytesPruébalo en línea!
Estoy seguro de que esto podría hacerse más corto al no intentar usar las funciones de matriz integradas de PHP, ¡pero tuve que intentarlo!
O 85 bytes
El swing de @ Night2, hecho más corto al no intentar usar las funciones de matriz integradas de PHP:
Pruébalo en línea!
fuente
array_column
no funcione en una serie de cadenas, de lo contrario sería bastante más útil para CG. Y, por supuesto, tener que saltar$argv[0]
siempre es un dolor también ...Clojure / ClojureScript, 43 bytes
Crea una función anónima. Escrito en un ClojueScript REPL, también debe ser válido Clojure.
Ingrese aquí , luego llame a través de
(*1 ["HELLO" "world" "!!!!!"])
. O hazlo(def f *1)
y luego úsalo(f ["abc" "cba"])
.fuente
Ceilán, 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)};
Mientras que Ceilán tiene una
zip
función , solo necesita dos iterables en lugar de uno iterable.unzip
, por otro lado, toma un iterable de tuplas, y no quiero convertir mis cadenas en tuplas. Así que implementé mi propia función de transposición, inspirada en una implementación de Haskell que Google encontró para mí en alguna parte .Los tipos de
n
yt
podrían definirse de manera mucho más general, pero esto es Codegolf ;-) (n
es un caso especial de qué que propuseassertNarrow
hace dos semanas ).fuente
Perl 6 , 33 bytes
Ejemplo de uso:
fuente
𝔼𝕊𝕄𝕚𝕟, 15 caracteres / 30 bytes
Try it here (Firefox only).
Me acabo de dar cuenta de que la función sortBy de Lodash también funciona en cadenas.
fuente
Jalea , 3 bytes
Pruébalo en línea!
Solo es válido si se considera como un programa completo : el valor resultante es una lista de cadenas, pero cuando se imprime, Jelly lo aplana implícitamente .
fuente
Stax , 5 bytes
Tan cerca de LMNOP :(
¡Ejecútelo y depúrelo en staxlang.xyz!
Coloque todas las entradas en una lista de cadenas (
L
) y transponga esta lista (M
). Para cada cadena resultante (F
), ordénela (o
) e imprímala (p
).fuente