Имея список строк, выведите единственную строку, сформированную путем взятия символа из каждой строки в каждой позиции, сортировки их по порядковому номеру ASCII и добавления их по порядку к выходной строке. Другими словами, для n
входных строк первые n
символы вывода будут первыми символами каждого из входов, отсортированных по порядковому номеру, вторые n
символы вывода будут вторыми символами каждого из входов, отсортированных по порядковому номеру, и т.д. на. Вы можете предположить, что все строки имеют одинаковую длину и что будет хотя бы одна строка. Все строки будут состоять только из печатных символов ASCII (порядковые номера 32-127).
Ссылочная реализация в Python ( попробуйте онлайн ):
def stringshuffle(strings):
res = ''
for i in range(len(strings[0])):
res += ''.join(sorted([s[i] for s in strings],key=ord))
return res
Примеры:
"abc","cba" -> "acbbac"
"HELLO","world","!!!!!" -> "!Hw!Eo!Lr!Ll!Od"
правила
- Стандартные лазейки запрещены
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах
Leaderboard
Фрагмент стека в нижней части этого поста создает таблицу лидеров из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш счет равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая затем будет отображаться во фрагменте:
## [><>](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 байт
Zips (
C
) input (Q
),M
apsS
ort, затемs
ums.Попробуйте онлайн .
источник
TeaScript , 9 байт
TeaScript имеет все правильные встроенные модули, реализованные всеми неправильными способами.
Попробуйте онлайн
Ungolfed
объяснение
источник
CJam, 5 байтов
Попробуй это здесь .
источник
Python,
5048 байтовСпасибо @xnor за -2 байта!
источник
"".join
в переменной.JavaScript (ES6), 57 байт
источник
Октава, 15 байт
Пример:
источник
Юлия, 46 байт
Это создает безымянную функцию, которая принимает массив строк и возвращает строку. Чтобы назвать его, дайте ему имя, например
f=x->...
.Ungolfed:
источник
Минколанг 0,13 , 46 байт
Попробуй это здесь. Ожидает ввода, как
"HELLO""world""!!!!!"
(так что без запятых).объяснение
источник
GolfScript, 8 байт
Попробуйте онлайн на сайте GolfScript .
Как это устроено
источник
К, 10 байт
Join (
,/
) своего рода ({x@<x}
) each ('
) из transpose (+
) списка строк.В бою:
Все просто, но K здесь немного больно, если у него нет односимвольной функции сортировки, а вместо этого делится операция на оператор индекса разброса
@
и примитив, который дает вектор перестановки, который будет сортировать список<
.источник
C ++ 14, 152 байта
Не пользуясь преимуществами map + zip (угадайте почему)
Ungolfed + использование
источник
Mathematica, 51 байт
Манипулирование строками в Mathematica стоит дорого ...
источник
Japt , 12 байт
20Попробуйте онлайн!
объяснение
источник
PHP ,
9291 байтПопробуйте онлайн!
Я уверен, что это можно сделать короче, не пытаясь использовать встроенные в PHP функции массива, но пришлось попробовать!
Или 85 байт
Качели @ Night2, сделанные короче, не пытаясь использовать встроенные в PHP функции массива:
Попробуйте онлайн!
источник
array_column
не будет работать с массивом строк, иначе это будет немного более полезно для CG. И, конечно, пропустить$argv[0]
это тоже всегдаClojure / ClojureScript, 43 байта
Создает анонимную функцию. Написано в ClojueScript REPL, также должен быть действительным Clojure.
Введите его здесь , затем позвоните через
(*1 ["HELLO" "world" "!!!!!"])
. Или делай,(def f *1)
а потом пользуйся(f ["abc" "cba"])
.источник
Цейлон, 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)};
В то время как у Цейлона есть
zip
функция , она требует только двух итераций вместо итерируемых из них.unzip
с другой стороны, принимает итеративный набор кортежей, и я не хочу конвертировать мои строки в кортежи. Поэтому я реализовал свою собственную функцию транспонирования, вдохновленную реализацией на Haskell, которую Google где-то нашел для меня .Типы
n
иt
могут быть определены гораздо более общие, но это Codegolf ;-) (n
это частный случай того, что я предложил, какassertNarrow
две недели назад ).источник
Perl 6 , 33 байта
Пример использования:
источник
𝔼𝕊𝕄𝕚𝕟, 15 символов / 30 байтов
Try it here (Firefox only).
Просто понял, что функция sortBy Lodash работает и со строками.
источник
Желе , 3 байта
Попробуйте онлайн!
Действителен только в том случае, если рассматривается как полная программа : полученное значение представляет собой список строк, но при его печати Jelly неявно выравнивает его .
источник
Stax , 5 байт
Так близко к LMNOP :(
Запустите и отладьте его на staxlang.xyz!
Поместите все входные данные в один список строк (
L
) и транспонируйте этот список (M
). Для каждой полученной строки (F
), sort (o
) и print (p
) это.источник