var QUESTION_ID=85255,OVERRIDE_USER=56179;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<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="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><div id="language-list"> <h2>Winners 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><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>
Réponses:
Pyth, 1 octet
Essayez-le ici
Une autre transposition intégrée
la source
Python,
3629 octetszip(*s)
renvoie une liste de tuples de chaque caractère, transposée.Essayez-le en ligne
la source
"cdmy", "aoaa", "rgny"
, qui est une liste["cdmy", "aoaa", "rgny"]
ou un tuple("cdmy", "aoaa", "rgny")
map(''.join,zip(*s))
fonctionne également pour la conversion de chaînes (Python 2 uniquement), et pour Python 3,[*map(''.join,zip(*s))]
afaik fonctionnemap(''.join,zip(*s))
est également valable pour Python 3 - nous autorisons les itérateurs / générateurs à la place des listes par défaut.Gelée , 1 octet
Essayez-le en ligne!
la source
MATL , 1 octet
Essayez-le en ligne!
Prend l'entrée implicitement, transpose, affiche la sortie implicitement.
la source
PowerShell v2 +,
6654 octetsYo ... non
map
, nonzip
, nontranspose
, etc., donc nous pouvons rouler les nôtres. Gros accessoires à @DarthTwon pour le golf de 12 octets.Prend l'entrée
$n
, établit unefor
boucle. L'initialisation est définie$x
sur0
, le test consiste à savoir si nous avons encore des lettres dans notre mot$n[0][$x]
et nous incrémentons$x++
chaque itération.À l'intérieur de la boucle, nous prenons notre tableau de chaînes, le canalisons vers une boucle intérieure qui crache le caractère approprié de chaque mot. Cela est encapsulé dans un
-join
pour former une chaîne, et cette chaîne est laissée sur le pipeline. À la fin de l'exécution, les chaînes du pipeline sont implicitement imprimées.la source
,
plutôt que de penser à la réponseparam($n)$x=0;while($n[0][$x]){-join($n|%{$_[$x]});$x++}
. Et aucune erreur ici: Dfor
boucle pour deux autres. ;-)while
boucle. Bon travail monsieur!Vim,
3736 frappesToutes les autres réponses sont ennuyeuses et utilisent des fonctions ennuyeuses d'un seul octet. Voici une réponse hacky qui fait le tout manuellement, dans quelque chose qui n'est même pas un langage de programmation:
Explication:
Maintenant, tout va bien, mais le tampon a du texte supplémentaire. Nous devons donc:
la source
CJam,
65 octets1 octet enregistré grâce à Luis Mendo.
Essayez-le en ligne!
la source
Pyke, 1 octet
Essayez-le ici!
Transposer.
la source
Rétine ,
4543 octetsLe nombre d'octets suppose un codage ISO 8859-1.
Le saut de ligne de tête est significatif. L'entrée et la sortie sont des listes terminées par saut de ligne de chaînes ASCII imprimables (notez que les deux ont un seul saut de ligne de fin).
Essayez-le en ligne!
Je savais depuis un moment que la transposition de blocs rectangulaires serait une douleur dans la rétine (alors que la transposition de carrés n'est pas trop mal), mais je n'ai jamais vraiment essayé. La première solution était en effet un énorme 110 octets de long, mais après plusieurs changements substantiels dans l'approche, les 45 octets résultants ne sont de loin pas aussi mauvais que je le pensais (mais quand même ...). L'explication suivra demain.
Explication
Étape 1: trier
Cela fait le travail principal de réordonner les caractères dans l'entrée, mais cela finit par gâcher la séparation en lignes. Fait intéressant, si nous supprimons le
|¶
, nous obtenons le code requis pour transposer une entrée carrée.Les étapes de tri (indiquées par le
O
) fonctionnent comme ceci: elles trouvent toutes les correspondances de l'expression rationnelle donnée (la chose après le`
), puis trient ces correspondances et les réinsèrent dans les endroits où les correspondances ont été trouvées. En fait, cette expression régulière correspond à chaque caractère: les sauts de ligne non via l'.(?<=(.*))
alternative et les sauts de ligne via le¶
. Par conséquent, il trie tous les caractères de l'entrée. La partie la plus intéressante est ce qu'ils sont classés par .L'
$
option active un mode de "tri par", où chaque correspondance est remplacée par le modèle de substitution sur la deuxième ligne, qui est ensuite utilisé pour comparer les correspondances. De plus, le#
paramètre indique à Retina de convertir le résultat de la substitution en un entier et de comparer ces entiers (au lieu de les traiter comme des chaînes).Donc, finalement, nous devons examiner l'expression rationnelle et la substitution. Si les premières correspondances alternatives (c'est-à-dire que nous avons fait correspondre n'importe quel caractère dans l'une des lignes), le
(?<=(.*))
capture tout dans ce groupe jusqu'à ce caractère sur cette ligne1
. Le$.1
dans le modèle de substitution le remplace par la longueur du groupe1
. Par conséquent, le premier caractère de chaque chaîne devient1
, le second devient2
, le troisième devient3
et ainsi de suite. Il devrait être clair maintenant comment cela transpose une entrée carrée: tous les premiers caractères des lignes viennent en premier et se retrouvent tous dans la ligne la plus haute, puis tous les seconds caractères se retrouvent dans la deuxième ligne et ainsi de suite. Mais pour ces entrées rectangulaires, nous faisons également correspondre les sauts de ligne. Depuis le groupe1
n'est pas utilisé dans ce cas, la substitution est vide, mais aux fins de l'#
option, cela est considéré0
. Cela signifie que tous les sauts de ligne sont triés vers l'avant.Alors maintenant, nous avons les caractères dans le premier ordre (premier caractère de chaque chaîne, deuxième caractère de chaque chaîne, etc.) et tous les sauts de ligne au début.
Étape 2: Match
Nous devons maintenant diviser les caractères en lignes de la bonne longueur. Cette longueur correspond au nombre de lignes dans l'entrée d'origine, qui correspond au nombre de sauts de ligne que nous avons au début de la chaîne.
Le fractionnement se fait ici à l'aide d'une étape de correspondance, qui trouve simplement toutes les correspondances de l'expression régulière donnée et utilise l'
!
option pour imprimer ces correspondances (la valeur par défaut serait de les compter à la place). Le but de l'expression régulière est donc de faire correspondre une ligne à la fois.Nous commençons par «compter» le nombre avec le lookbehind
(?<=(¶)*.*)
. Il génère une capture en groupe1
pour chaque saut de ligne à l'avant.Ensuite, pour chacune de ces captures, nous associons un seul caractère avec
(?<-1>.)+
.la source
code machine x86, 19 octets
En hex:
Entrée::
ECX
# de chaînes (n)EDX
,: longueur de chaîne individuelle (m)ESI
,: tableau de chaînes d'entrée,:EDI
tampon de sortie recevant un tableau de chaînes. Le tableau est présumé être défini commechar src[n][m+1]
pour l'entrée etchar dst[m][n+1]
pour la sortie, et toutes les chaînes sont terminées par NULL.la source
Brachylog , 5 octets
Attend une liste de chaînes en entrée, par exemple
run_from_atom('z:ca.',["money":"taken":"trust"],Output).
Explication
la source
05AB1E, 3 octets
Expliqué
Essayez-le en ligne
la source
CJam , 3 octets
Il s'agit d'un bloc de code (équivalent à une fonction; autorisé par défaut ) qui attend l'entrée sur la pile et laisse la sortie sur la pile.
Essayez-le en ligne!
la source
JavaScript ES6,
4846 octetsJe me sens exclu, nous n'avons pas de fonction zip intégrée. Merci nicael d'avoir signalé mon erreur de type.
Usage
Retour
la source
[...a[0]].map
, car cea[0]
n'est pas un tableau..join
pour résoudre ce problème.join``
au lieu d'join('')
enregistrer 2 octets. Downvote rétractéUtilitaires Bash + BSD, 27
E / S via des chaînes séparées par des sauts de ligne STDIN / STDOUT.
Vous devrez peut-être installer
rs
avecsudo apt install rs
ou similaire. Fonctionne prêt à l'emploi sur OS X.L'
-T
option de fairers
le gros du travail de la transposition. Le reste est juste un formatage:sed
commande insère simplement:
après chaque caractère-c:
spécifie que les colonnes d'entrée sont:
séparées-g0
spécifie que les colonnes de sortie ont une séparation de largeur nulleSi ma lecture de la
rs
page de manuel est correcte, alors ce qui suit devrait fonctionner pour un score de 12, mais malheureusement cela ne fonctionne pas - voir la note ci-dessous:Exemple de sortie:
Si l'entrée est censée être entièrement ASCII imprimable, le
:
peut être remplacé par un caractère non imprimable, par exemple 0x7BEL
.Remarque
Je voulais comprendre pourquoi je ne pouvais pas obtenir l'
-E
option de travailler et de me débarrasser dused
prétraitement. J'ai trouvé lers
code source ici . Comme vous pouvez le voir, donner cette option définit leONEPERCHAR
drapeau. Cependant, il n'y a rien dans le code qui vérifie réellement l'état de cet indicateur. Je pense donc que nous pouvons dire que même si cette option est documentée, elle n'est pas mise en œuvre.En fait, cette option est documentée dans la
rs
page de manuel Linux :mais pas la version OS X.
la source
PHP, 82 bytes
takes and returns an array of strings
break down
examples
la source
APL, 3 bytes
↑
takes the input strings and turns them into a char matrix.⍉
transposes the matrix.↓
splits back the rows of the resulting matrix into strings.la source
K, 1 byte
Try it here!
Transpose
la source
Mathematica, 26 bytes
Anonymous function. Takes a string list as input and returns a string list as output. The Unicode character is U+F3C7, representing
\[Transpose]
. Works by converting to a character matrix, transposing, and converting back to a string list. If the input/output format was stretched, then a simple 5-byte transpose would work:la source
\[Transpose]
.ᵀ
?⍉
.MATLAB / Octave, 4 bytes
This defines an anonymous function. Input format is
['car'; 'dog'; 'man'; 'yay']
.Try it here.
la source
f = @(x)x'
,f([{'abcd'},{'abcd'},{'abcd'}])
outputs ans = 'abcd' 'abcd' 'abcd'f(['abcd';'abcd';'abcd'])
. I've edited the answer to specify the input formatHaskell, 41 bytes
Or with a bit more air:
The second list is the list of words repeated “the length of a word” time. On each list of words, we select the n-th letter of each word, giving the result.
la source
words
andunwords
. Further,map(\_->l)(l!!0)
isl<*l!!0
, so it boils down to\l->zipWith($)[map(!!n)|n<-[0..]]$l<$l!!0
.l<$l!!0
(first time wrong, second time right), but you got it right anyway.Common Lisp, 62 bytes
The
map
function takes a result type (herelist
), a function f to apply and one or more sequences s1, ..., sn. All sequences are iterated in parallel. For each tuple of elements (e1,...,en) taken from those sequences, we call (f e1 ... en) and the result is accumulated in a sequence of the desired type.We take a list of strings, say
("car" "dog" "man" "yay")
, and useapply
to callmap
. We have to do this so that the input list is used as more arguments tomap
. More precisely, this:... is equivalent to:
And since strings are sequences, we iterate in parallel over all first characters, then all second characters, etc... For example, the first iteration calls f as follows:
The anonymous lambda takes the list of arguments given to it and coerces it back to a string.
la source
Perl, 91 bytes
So lengthy one..
Try it here!
la source
Ruby, 46 bytes
Probably the first time that "Ruby strings aren't Enumerables" is actually biting me hard since I had to map the strings into arrays before processing. (Normally having to use
String#chars
isn't enough of a byte loss to matter, but since I need to map them, it stings a lot more)la source
Clojure, 68 bytes
Maps a function which is just
reduce
(goes on elements of the list one by one and joins nth character of the string) on the range from 0 to length of the first string.See it online: https://ideone.com/pwhZ8e
la source
C#, 53 bytes
C# lambda (
Func
) where the output isIList<string>
and the output isIEnumerable<string>
. I dont know how workzip
in other language but I can't find a way to use the C#'s one here.Aggregate
fit the need well. No transpose in C#, there is one in Excel but I wont use it.Try it online!
la source