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>
Antworten:
Pyth, 1 Byte
Probieren Sie es hier aus
Eine weitere Transponierung eingebaut
quelle
Python,
3629 Byteszip(*s)
gibt eine Liste von Tupeln jedes Zeichens zurück, transponiert.Probieren Sie es online aus
quelle
"cdmy", "aoaa", "rgny"
, das ist eine Liste["cdmy", "aoaa", "rgny"]
oder ein Tupel("cdmy", "aoaa", "rgny")
map(''.join,zip(*s))
funktioniert auch für die String-Konvertierung (nur Python 2), und für Python 3[*map(''.join,zip(*s))]
funktioniert afaikmap(''.join,zip(*s))
gilt auch für Python 3 - wir erlauben standardmäßig Iteratoren / Generatoren anstelle von Listen.Gelee , 1 Byte
Probieren Sie es online!
quelle
MATL , 1 Byte
Probieren Sie es online!
Nimmt Eingaben implizit auf, transponiert und zeigt Ausgaben implizit an.
quelle
PowerShell v2 +,
6654 BytesYo ... nein
map
, neinzip
, neintranspose
, usw., also können wir unsere eigenen rollen. Große Requisiten an @DarthTwon für das 12-Byte-Golf.Nimmt Eingaben auf
$n
, richtet einefor
Schleife ein. Die Initialisierung setzt$x
auf0
, der Test ist , ob wir noch Briefe in unserem Wort haben$n[0][$x]
, und wir erhöhen bei$x++
jeder Iteration.Innerhalb der Schleife nehmen wir unser String-Array und leiten es zu einer inneren Schleife, die aus jedem Wort das entsprechende Zeichen ausspuckt. Das wird in a gekapselt
-join
, um eine Zeichenfolge zu bilden, und diese Zeichenfolge verbleibt in der Pipeline. Am Ende der Ausführung werden die Zeichenfolgen in der Pipeline implizit gedruckt.quelle
,
anstatt über die Antwort nachzudenkenparam($n)$x=0;while($n[0][$x]){-join($n|%{$_[$x]});$x++}
. Und hier keine Fehler: Dfor
Schleife für zwei weitere. ;-)while
Schleife wirklich abgespeckt habe . Gute Arbeit, Sir!Vim,
3736 TastenanschlägeAlle anderen Antworten sind langweilig und verwenden langweilige Single-Byte-Builtins. Hier ist eine knifflige Antwort, die das Ganze manuell erledigt, in etwas, das nicht einmal eine Programmiersprache ist:
Erläuterung:
Jetzt ist alles in Ordnung, aber der Puffer enthält noch zusätzlichen Text. Also müssen wir:
quelle
CJam,
65 Bytes1 Byte dank Luis Mendo gespeichert.
Probieren Sie es online!
quelle
Pyke, 1 Byte
Probieren Sie es hier aus!
Transponieren.
quelle
Retina ,
4543 BytesDie Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Der Zeilenvorschub ist signifikant. Eingabe und Ausgabe sind Zeilenvorschub-terminierte Listen druckbarer ASCII-Zeichenfolgen (beachten Sie, dass beide einen einzelnen nachgestellten Zeilenvorschub haben).
Probieren Sie es online!
Ich wusste für eine Weile, dass das Transponieren von rechteckigen Blöcken eine Belastung für die Netzhaut sein würde (wohingegen das Transponieren von Quadraten nicht allzu schlimm ist), habe es aber nie wirklich versucht. Die erste Lösung war in der Tat satte 110 Bytes lang, aber nach einigen wesentlichen Änderungen im Ansatz sind die resultierenden 45 Bytes bei weitem nicht so schlecht, wie ich vermutet habe (aber immer noch ...). Erklärung folgt morgen.
Erläuterung
Stufe 1: Sortieren
Dies erledigt die Hauptarbeit des Neuordnens der Zeichen in der Eingabe, führt jedoch dazu, dass die Trennung in Zeilen durcheinander gebracht wird. Interessanterweise, wenn wir die entfernen
|¶
, den Code, der erforderlich ist, um eine Quadrateingabe zu transponieren.Sortierphasen (gekennzeichnet durch
O
) funktionieren wie folgt: Sie finden alle Übereinstimmungen des angegebenen regulären Ausdrucks (das Ding nach dem`
), sortieren diese Übereinstimmungen und fügen sie erneut an den Stellen ein, an denen die Übereinstimmungen gefunden wurden. Dieser reguläre Ausdruck entspricht zufällig jedem einzelnen Zeichen: Nicht-Zeilenvorschub über die.(?<=(.*))
Alternative und Zeilenvorschub über die¶
. Daher werden alle Zeichen in der Eingabe sortiert. Der interessantere Teil ist, was sie sortiert sind durch .Die
$
Option aktiviert einen "Sortieren nach" -Modus, in dem jede Übereinstimmung durch das Substitutionsmuster in der zweiten Zeile ersetzt wird, das dann zum Vergleichen der Übereinstimmungen verwendet wird. Darüber hinaus ist die#
weist Retina an, das Ergebnis der Ersetzung in eine Ganzzahl umzuwandeln und diese Ganzzahlen zu vergleichen (anstatt sie als Zeichenfolgen zu behandeln).Schließlich müssen wir uns den regulären Ausdruck und die Substitution ansehen. Wenn die erste Alternative zutrifft (dh wir haben ein Zeichen in einer der Zeilen gefunden),
(?<=(.*))
fängt das Programm alles bis zu diesem Zeichen in dieser Zeile in Gruppen ein1
. Das$.1
in dem Substitutionsmuster ersetzt dies durch die Länge der Gruppe1
. Daher wird das erste Zeichen in jeder Zeichenfolge1
, das zweite wird2
das dritte3
und so weiter. Es sollte jetzt klar sein, wie dies eine Quadrateingabe transponiert: Alle ersten Zeichen der Zeilen kommen zuerst und landen alle in der obersten Zeile, dann enden alle zweiten Zeichen in der zweiten Zeile und so weiter. Für diese rechteckigen Eingänge passen wir jedoch auch die Zeilenvorschübe an. Seit Gruppe1
Wird in diesem Fall nicht verwendet, ist die Ersetzung leer, dies wird jedoch für die Zwecke der#
Option berücksichtigt0
. Das heißt, alle Zeilenvorschübe werden nach vorne sortiert.Jetzt haben wir also die Zeichen in der ersten Reihenfolge (erstes Zeichen jeder Zeichenfolge, zweites Zeichen jeder Zeichenfolge usw.) und alle Zeilenvorschübe am Anfang.
Stufe 2: Match
Wir müssen jetzt die Zeichen in Zeilen der richtigen Länge aufteilen. Diese Länge entspricht der Anzahl der Zeilen in der ursprünglichen Eingabe, die der Anzahl der Zeilenvorschübe entspricht, die wir am Anfang der Zeichenfolge haben.
Die Aufteilung erfolgt hier mit Hilfe einer Match-Phase, die einfach alle Übereinstimmungen des angegebenen Regex findet und die
!
Option verwendet, um diese Übereinstimmungen auszudrucken (standardmäßig werden sie stattdessen gezählt). Das Ziel des regulären Ausdrucks besteht also darin, jeweils eine Zeile abzugleichen.Wir beginnen mit dem "Zählen" der Zahl mit dem Lookbehind
(?<=(¶)*.*)
. Es wird eine Erfassung in der Gruppe1
für jeden Zeilenvorschub an der Vorderseite generiert .Dann ordnen wir für jede dieser Erfassungen ein einzelnes Zeichen zu
(?<-1>.)+
.quelle
x86-Maschinencode, 19 Byte
In hex:
Eingabe:: Anzahl
ECX
der Zeichenfolgen (n)EDX
,: Länge der einzelnen Zeichenfolgen (m)ESI
,: Array von Eingabezeichenfolgen,:EDI
Ausgabepuffer, der ein Array von Zeichenfolgen empfängt. Es wird davon ausgegangen, dass das Array sowohlchar src[n][m+1]
für die Eingabe als auchchar dst[m][n+1]
für die Ausgabe definiert ist und alle Zeichenfolgen mit NULL-Abschluss versehen sind.quelle
Brachylog , 5 Bytes
Erwartet eine Liste von Zeichenfolgen als Eingabe, z
run_from_atom('z:ca.',["money":"taken":"trust"],Output).
Erläuterung
quelle
05AB1E, 3 Bytes
Erklärt
Probieren Sie es online aus
quelle
CJam , 3 Bytes
Dies ist ein Codeblock (äquivalent zu einer Funktion; standardmäßig zulässig ), der die Eingabe auf dem Stapel erwartet und die Ausgabe auf dem Stapel belässt.
Probieren Sie es online!
quelle
JavaScript ES6,
4846 BytesIch fühle mich ausgeschlossen, wir haben keine eingebaute Zip-Funktion. Danke nicael für den hinweis auf meinen typenfehler.
Verwendung
kehrt zurück
quelle
[...a[0]].map
, daa[0]
kein Array ist..join
sie bearbeitet , um dieses Problem zu beheben.join``
anstattjoin('')
2 Bytes zu speichern. Downvote zurückgezogenBash + BSD-Dienstprogramme, 27
E / A über durch STDIN / STDOUT durch Zeilenumbrüche getrennte Zeichenfolgen.
Möglicherweise müssen Sie
rs
mitsudo apt install rs
oder ähnlich installieren . Funktioniert sofort unter OS X.Die
-T
Option, umrs
das schwere Heben der Umsetzung zu tun. Der Rest ist nur die Formatierung:sed
Befehl wird einfach:
nach jedem Zeichen eingefügt-c:
Gibt an, dass Eingabespalten sind:
getrennt werden-g0
Gibt an, dass Ausgabespalten eine Breite von Null habenWenn meine Lektüre der
rs
manpage richtig ist, dann folgende sollte für eine Punktzahl von 12 arbeiten, aber leider funktioniert es nicht - siehe Anmerkung unten:Beispielausgabe:
Wenn erwartet wird, dass die Eingabe vollständig druckbares ASCII ist, wird das
:
möglicherweise durch ein nicht druckbares Zeichen ersetzt, z. B. 0x7BEL
. .Hinweis
Ich wollte verstehen, warum ich nicht die
-E
Möglichkeit hatte zu arbeiten und diesed
Vorverarbeitung loszuwerden . Ich habe denrs
Quellcode hier gefunden . Wie Sie sehen können, setzt die Angabe dieser Option dasONEPERCHAR
Flag. Der Code enthält jedoch nichts, was den Status dieses Flags überprüft. Wir können also sagen, dass diese Option, obwohl sie dokumentiert ist, nicht implementiert ist.Tatsächlich ist diese Option in der Linux-
rs
Manpage dokumentiert:aber nicht die OS X-Version.
quelle
PHP, 82 Bytes
nimmt und gibt ein Array von Strings zurück
Nervenzusammenbruch
Beispiele
quelle
APL, 3 Bytes
↑
Nimmt die Eingabezeichenfolgen und verwandelt sie in eine Zeichenmatrix.⍉
transponiert die Matrix.↓
Teilt die Zeilen der resultierenden Matrix in Strings auf.quelle
K, 1 Byte
Probieren Sie es hier aus!
Transponieren
quelle
Mathematica, 26 Bytes
Anonyme Funktion. Nimmt eine Stringliste als Eingabe und gibt eine Stringliste als Ausgabe zurück. Das Unicode-Zeichen ist U + F3C7 und steht für
\[Transpose]
. Konvertiert in eine Zeichenmatrix, transponiert und konvertiert zurück in eine Zeichenfolgenliste. Wenn das Eingabe- / Ausgabeformat gestreckt wäre, würde eine einfache 5-Byte-Transponierung funktionieren:quelle
\[Transpose]
.ᵀ
?⍉
.MATLAB / Octave, 4 Bytes
Dies definiert eine anonyme Funktion. Eingabeformat ist
['car'; 'dog'; 'man'; 'yay']
.Probieren Sie es hier aus .
quelle
f = @(x)x'
,f([{'abcd'},{'abcd'},{'abcd'}])
gibt am = ‚abcd‘ ‚abcd‘ ‚abcd‘f(['abcd';'abcd';'abcd'])
. Ich habe die Antwort bearbeitet, um das Eingabeformat anzugebenHaskell, 41 Bytes
Oder mit etwas mehr Luft:
Die zweite Liste ist die Liste von Wörtern, die sich "die Länge eines Wortes" Mal wiederholen. In jeder Liste von Wörtern wählen wir den n-ten Buchstaben jedes Wortes aus und geben das Ergebnis an.
quelle
words
und weglassenunwords
. Weitermap(\_->l)(l!!0)
istl<*l!!0
, so läuft es auf\l->zipWith($)[map(!!n)|n<-[0..]]$l<$l!!0
.l<$l!!0
(das erste Mal falsch, das zweite Mal richtig), aber Sie haben es trotzdem richtig verstanden.Common Lisp, 62 Bytes
Die
map
Funktion nimmt einen Ergebnistyp (hierlist
), eine anzuwendende Funktion f und eine oder mehrere Folgen s1 , ..., sn . Alle Sequenzen werden parallel durchlaufen. Für jedes Tupel von Elementen (e1, ..., en), die aus diesen Sequenzen entnommen wurden, rufen wir (fe1 ... en) auf und das Ergebnis wird in einer Sequenz des gewünschten Typs akkumuliert.Wir nehmen eine Liste von Strings, sagen wir
("car" "dog" "man" "yay")
, und verwenden sie,apply
um anzurufenmap
. Wir müssen dies tun, damit die Eingabeliste als Argument für mehr verwendet wirdmap
. Genauer gesagt:... ist äquivalent zu:
Und da Strings Sequenzen sind, iterieren wir parallel über alle ersten Zeichen, dann über alle zweiten Zeichen usw. Die erste Iteration ruft beispielsweise f wie folgt auf:
Das anonyme Lambda nimmt die Liste der Argumente und zwingt sie zu einer Zeichenfolge zurück.
quelle
Perl, 91 Bytes
So lange ein ..
Probieren Sie es hier aus!
quelle
Ruby, 46 Bytes
Wahrscheinlich ist das erste Mal, dass "Ruby-Strings keine Enumerables" sind, ein heftiger Biss für mich, da ich die Strings vor der Verarbeitung in Arrays abbilden musste. (Normalerweise
String#chars
reicht es nicht aus, Byteverluste zu verwenden , um eine Rolle zu spielen, aber da ich sie abbilden muss, sticht es viel mehr)quelle
Clojure, 68 Bytes
Ordnet eine Funktion zu, die gerecht ist
reduce
im Bereich von 0 bis zur Länge der ersten Zeichenfolge (geht nacheinander auf Elemente der Liste und verbindet das n-te Zeichen der Zeichenfolge).Sehen Sie es online: https://ideone.com/pwhZ8e
quelle
C #, 53 Bytes
C # lambda (
Func
) wo die Ausgabe istIList<string>
und die Ausgabe istIEnumerable<string>
. Ich weiß nicht, wie manzip
in einer anderen Sprache arbeitet, aber ich kann hier keinen Weg finden, das C # zu benutzen .Aggregate
passen die Notwendigkeit gut. Keine Transponierung in C #, es gibt eine in Excel, aber ich verwende sie nicht.Probieren Sie es online!
quelle