Biorąc pod uwagę listę ciągów, wypisz pojedynczy ciąg utworzony przez pobranie znaku z każdego ciągu w każdej pozycji, posortowanie ich według porządkowej ASCII i dołączenie ich w kolejności do ciągu wyjściowego. Innymi słowy, w przypadku n
ciągów wejściowych pierwsze n
znaki danych wyjściowych będą pierwszymi znakami każdego z danych wejściowych posortowanymi według porządkowej, a drugan
znaki danych wyjściowych będą drugimi znakami każdego z danych wejściowych posortowanych według liczby porządkowej, i tak na. Możesz założyć, że wszystkie ciągi są równej długości i że będzie co najmniej jeden ciąg. Wszystkie ciągi znaków będą się składały tylko z drukowalnych znaków ASCII (porządek 32-127).
Odwołanie do implementacji w Pythonie ( spróbuj 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
Przykłady:
"abc","cba" -> "acbbac"
"HELLO","world","!!!!!" -> "!Hw!Eo!Lr!Ll!Od"
Zasady
- Standardowe luki są zabronione
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach
Tabela liderów
Fragment kodu na dole tego postu generuje tabelę wyników na podstawie odpowiedzi a) jako lista najkrótszych rozwiązań dla każdego języka oraz b) jako ogólna tabela wyników.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik to suma dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:
## [><>](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 bajtów
Zips (
C
) input (Q
),M
apsS
ort, a następnies
ums.Wypróbuj online .
źródło
TeaScript , 9 bajtów
TeaScript ma wszystkie właściwe wbudowane zaimplementowane na wszystkie niewłaściwe sposoby.
Wypróbuj online
Nie golfił
Wyjaśnienie
źródło
CJam, 5 bajtów
Wypróbuj tutaj .
źródło
Python,
5048 bajtówDzięki @xnor za -2 bajty!
źródło
"".join
do zmiennej.JavaScript (ES6), 57 bajtów
źródło
Oktawa, 15 bajtów
Przykład:
źródło
Julia, 46 bajtów
Tworzy to nienazwaną funkcję, która akceptuje tablicę ciągów i zwraca ciąg. Aby to nazwać, nadaj mu nazwę, np
f=x->...
.Nie golfowany:
źródło
Minkolang 0,13 , 46 bajtów
Wypróbuj tutaj. Oczekuje danych wejściowych takich jak
"HELLO""world""!!!!!"
(więc bez przecinków).Wyjaśnienie
źródło
GolfScript, 8 bajtów
Wypróbuj online na Web GolfScript .
Jak to działa
źródło
K, 10 bajtów
Join (
,/
) rodzaj ({x@<x}
) each ('
) transpozycji (+
) listy ciągów.W akcji:
To proste, ale K trochę tu cierpi, ponieważ nie ma funkcji sortowania jednoznakowego, a zamiast tego dzieli operację na operator indeksu scatter-gather
@
i operację podstawową, która daje wektor permutacji, który sortowałby listę<
.źródło
C ++ 14, 152 bajty
Brak korzystania z zalet map + zip (zgadnij dlaczego)
Ungolfed + użycie
źródło
Mathematica, 51 bajtów
Manipulacja łańcuchem w Mathematica jest droga ...
źródło
Japt , 12 bajtów
20Wypróbuj online!
Wyjaśnienie
źródło
PHP ,
9291 bajtówWypróbuj online!
Jestem pewien, że można tego dokonać krócej, nie próbując korzystać z wbudowanych funkcji PHP, ale musiałem spróbować!
Lub 85 bajtów
@ Huśtawka Night2, wykonywana krócej, nie próbując używać wbudowanych funkcji PHP:
Wypróbuj online!
źródło
array_column
nie będzie działać na szeregu ciągów, w przeciwnym razie byłby nieco bardziej przydatny dla CG. I oczywiście konieczność przeskakiwania$argv[0]
to również zawsze ból ...Clojure / ClojureScript, 43 bajty
Tworzy anonimową funkcję. Napisany w ClojueScript REPL, powinien być również prawidłowym Clojure.
Wpisz go tutaj , a następnie zadzwoń przez
(*1 ["HELLO" "world" "!!!!!"])
. Lub zrób,(def f *1)
a następnie użyj(f ["abc" "cba"])
.źródło
Ceylon, 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)};
Podczas gdy Cejlon ma
zip
funkcję , zajmuje tylko dwie iterowalne zamiast iterowalnej z nich.unzip
z drugiej strony wymaga iteracji krotek i nie chcę przekształcać ciągów w krotki. Wdrożyłem więc własną funkcję transpozycji, zainspirowaną implementacją Haskell, którą Google gdzieś dla mnie znalazło .Rodzaje
n
it
można by zdefiniować znacznie bardziej ogólnie, ale to jest Codegolf ;-) (n
jest to szczególny przypadek tego, co zaproponowałemassertNarrow
dwa tygodnie temu ).źródło
Perl 6 , 33 bajtów
Przykładowe użycie:
źródło
𝔼𝕊𝕄𝕚𝕟, 15 znaków / 30 bajtów
Try it here (Firefox only).
Właśnie zdałem sobie sprawę, że funkcja sortBy firmy Lodash działa również na łańcuchach.
źródło
Galaretka , 3 bajty
Wypróbuj online!
Prawidłowy tylko, jeśli jest uważany za pełny program : wynikowa wartość jest listą ciągów, ale po wydrukowaniu Jelly domyślnie spłaszcza go .
źródło
Stax , 5 bajtów
Tak blisko LMNOP :(
Uruchom i debuguj go na staxlang.xyz!
Umieść wszystkie dane wejściowe w jednej liście ciągów (
L
) i transponuj tę listę (M
). Dla każdego wynikowego ciągu (F
) posortuj (o
) i wydrukuj (p
).źródło