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>
Odpowiedzi:
Pyth, 1 bajt
Wypróbuj tutaj
Kolejna wbudowana transpozycja
źródło
Python,
3629 bajtówzip(*s)
zwraca listę krotek każdego znaku, transponowanych.Wypróbuj online
źródło
"cdmy", "aoaa", "rgny"
, która jest listą["cdmy", "aoaa", "rgny"]
lub krotką("cdmy", "aoaa", "rgny")
map(''.join,zip(*s))
działa również w przypadku konwersji ciągów (tylko Python 2), a w przypadku Python 3[*map(''.join,zip(*s))]
afaik działamap(''.join,zip(*s))
działa również w Pythonie 3 - domyślnie zezwalamy na iteratory / generatory zamiast list.Galaretka , 1 bajt
Wypróbuj online!
źródło
MATL , 1 bajt
Wypróbuj online!
Pobiera dane niejawnie, transponuje, wyświetla dane niejawnie.
źródło
PowerShell v2 +,
6654 bajtówYo ... nie
map
, niezip
, nietranspose
itd., Więc możemy sami rzucić. Wielkie rekwizyty dla @DarthTwon dla 12-bajtowego golfa.Pobiera dane wejściowe
$n
, tworzyfor
pętlę. Inicjalizacja ustawia się$x
na0
, test polega na tym, czy nadal mamy litery w naszym słowie$n[0][$x]
i zwiększamy$x++
każdą iterację.Wewnątrz pętli bierzemy naszą tablicę ciągów, prowadzimy ją do wewnętrznej pętli, która wydziela odpowiedni znak z każdego słowa. To jest zamknięte w a,
-join
aby utworzyć ciąg, a ten ciąg zostaje pozostawiony w potoku. Pod koniec wykonywania ciągi w potoku są domyślnie drukowane.źródło
,
, niż myślenie o odpowiedziparam($n)$x=0;while($n[0][$x]){-join($n|%{$_[$x]});$x++}
. I żadnych błędów tutaj: Dfor
pętli dla kolejnych dwóch. ;-)while
pętli. Dobra robota!Vim,
3736 naciśnięć klawiszyWszystkie pozostałe odpowiedzi są nudne i wykorzystują nudne wbudowane bajty. Oto odważna odpowiedź, która robi wszystko ręcznie, w czymś, co nie jest nawet językiem programowania:
Wyjaśnienie:
Teraz wszystko jest w porządku, ale w buforze pozostało trochę tekstu. Więc musimy:
źródło
CJam,
65 bajtówZaoszczędzono 1 bajt dzięki Luisowi Mendo.
Wypróbuj online!
źródło
Pyke, 1 bajt
Wypróbuj tutaj!
Transponować.
źródło
Siatkówka ,
4543 bajtówLiczba bajtów zakłada kodowanie ISO 8859-1.
Wiodące podawanie linii jest znaczące. Dane wejściowe i wyjściowe są zakończonymi podawaniem linii listami drukowalnych ciągów ASCII (zauważ, że oba mają jedno końcowe podawanie wiersza).
Wypróbuj online!
Przez jakiś czas wiedziałem, że transpozycja prostokątnych bloków byłaby uciążliwa dla siatkówki (podczas gdy transponowanie kwadratów nie jest takie złe), ale tak naprawdę nigdy nie próbowałem. Pierwsze rozwiązanie rzeczywiście miało aż 110 bajtów długości, ale po kilku istotnych zmianach w podejściu powstałe 45 bajtów nie jest tak złe, jak się spodziewałem (ale nadal ...). Wyjaśnienie nastąpi jutro.
Wyjaśnienie
Etap 1: Sortuj
Wykonuje to główną pracę polegającą na zmianie kolejności znaków na wejściu, ale ostatecznie psuje podział na linie. Co ciekawe, jeśli usuniemy
|¶
, otrzymamy kod wymagany do transponowania kwadratowego wejścia.Etapy sortowania (oznaczone przez
O
) działają w ten sposób: znajdują wszystkie dopasowania podanego wyrażenia regularnego (rzecz po`
), a następnie sortują te dopasowania i umieszczają je ponownie w miejscach, w których znaleziono dopasowania. Tak się składa, że wyrażenie regularne dopasowuje każdy pojedynczy znak: nieliniowe poprzez.(?<=(.*))
alternatywę i liniowe przez¶
. Dlatego sortuje wszystkie znaki na wejściu. Im bardziej interesujące jest to, co oni są klasyfikowane wg .The
$
Opcja aktywuje „sortowania o trybie”, gdzie każda odpowiedź jest zastąpiony przez wzorzec podstawienia w drugiej linii, który jest następnie wykorzystywany do porównywania wyników. Ponadto#
mówi Retinie, aby przekonwertowała wynik podstawienia na liczbę całkowitą i porównała te liczby całkowite (zamiast traktować je jak łańcuchy).Wreszcie musimy przyjrzeć się wyrażeniu regularnemu i podstawieniu. Jeśli pierwsze alternatywne dopasowania (tzn. Dopasowaliśmy dowolny znak w jednej z linii), wówczas
(?<=(.*))
przechwytuje wszystko do tego znaku w tej linii w grupie1
.$.1
We wzorcu podstawienia zastępuje to z długość grupy1
. Dlatego pierwszy znak w każdym ciągu staje1
, drugi staje się2
, trzeci staje się3
itd. Teraz powinno być jasne, jak to transponuje kwadratowe wejście: wszystkie pierwsze znaki linii są pierwsze i wszystkie kończą się na najwyższej linii, a następnie wszystkie drugie znaki kończą się w drugiej linii i tak dalej. Ale w przypadku tych prostokątnych danych wejściowych dopasowujemy również linie. Od grupy1
nie jest używane w tym przypadku, podstawienie jest puste, ale dla celów#
opcji jest to brane pod uwagę0
. Oznacza to, że wszystkie linie są sortowane do przodu.Mamy teraz znaki w pierwszej kolejności (pierwszy znak każdego łańcucha, drugi znak każdego łańcucha itp.) I wszystkie linie na początku.
Etap 2: Mecz
Teraz musimy podzielić znaki na wiersze o odpowiedniej długości. Ta długość odpowiada liczbie linii na oryginalnym wejściu, co odpowiada liczbie linii, jakie mamy na początku łańcucha.
Podział odbywa się tutaj za pomocą etapu dopasowania, który po prostu wyszukuje wszystkie dopasowania podanego wyrażenia regularnego i używa
!
opcji drukowania tych dopasowań (domyślnie zamiast nich je policzymy). Zatem celem wyrażenia regularnego jest dopasowanie jednej linii na raz.Zaczynamy od „liczenia” liczby za pomocą lookbehind
(?<=(¶)*.*)
. Generuje jedno przechwytywanie w grupie1
dla każdego wysuwu linii z przodu.Następnie dla każdego z tych ujęć dopasowujemy jedną postać
(?<-1>.)+
.źródło
kod maszynowy x86, 19 bajtów
W hex:
Dane wejściowe::
ECX
liczba ciągów (n)EDX
,: długość pojedynczego ciągu (m)ESI
,: tablica ciągów wejściowych,:EDI
bufor wyjściowy odbierający tablicę ciągów. Zakłada się, że tablica jest zdefiniowana jakochar src[n][m+1]
dla danych wejściowych ichar dst[m][n+1]
wyjściowych, a wszystkie łańcuchy są zakończone wartością NULL.źródło
Brachylog , 5 bajtów
Oczekuje listy ciągów jako danych wejściowych, np
run_from_atom('z:ca.',["money":"taken":"trust"],Output).
Wyjaśnienie
źródło
05AB1E, 3 bajty
Wyjaśniono
Wypróbuj online
źródło
CJam , 3 bajty
Jest to blok kodu (równoważny funkcji; domyślnie dozwolony ), który oczekuje danych wejściowych na stosie i pozostawia dane wyjściowe na stosie.
Wypróbuj online!
źródło
JavaScript ES6,
4846 bajtówCzuję się pominięty, nie mamy wbudowanej funkcji zip. Dzięki nicael za wskazanie mojego błędu typu.
Stosowanie
zwroty
źródło
[...a[0]].map
, ponieważa[0]
nie jest tablicą..join
je, aby rozwiązać ten problem.join``
zamiastjoin('')
zapisać 2 bajty. Downvote wycofaneNarzędzia Bash + BSD, 27
I / O poprzez STDIN / STDOUT ciągi rozdzielone znakiem nowej linii.
Może być konieczne zainstalowanie za
rs
pomocąsudo apt install rs
lub podobnego. Działa od razu w systemie OS X.-T
Opcjars
robi dźwiganie ciężarów transpozycji. Reszta to po prostu formatowanie:sed
Polecenie po prostu wstawia:
po każdej postaci-c:
określa, że kolumny wejściowe są:
rozdzielone-g0
określa, że kolumny wyjściowe mają zerową szerokość separacjiJeśli moje odczytanie strony
rs
podręcznika jest prawidłowe, poniższe wyniki powinny zadziałać dla wyniku 12, ale niestety nie działa - patrz uwaga poniżej:Przykładowe dane wyjściowe:
Jeśli oczekuje się, że wejście będzie w całości drukowalnym kodem ASCII, wówczas
:
można je zastąpić jakimś niedrukowalnym znakiem, npBEL
. 0x7 .Uwaga
Chciałem zrozumieć, dlaczego nie mogłem dostać
-E
opcji pracy i pozbyć sięsed
wstępnego przetwarzania. Znalazłemrs
tutaj kod źródłowy . Jak widać, podanie tej opcji powoduje ustawienieONEPERCHAR
flagi. Jednak w kodzie nie ma niczego, co faktycznie sprawdzałoby stan tej flagi. Myślę więc, że możemy powiedzieć, że pomimo tego, że opcja jest udokumentowana, nie została wdrożona.W rzeczywistości ta opcja jest udokumentowana na stronie Linux
rs
:ale nie wersja OS X.
źródło
PHP, 82 bajty
pobiera i zwraca tablicę ciągów
awaria
przykłady
źródło
APL, 3 bajty
↑
pobiera ciągi wejściowe i przekształca je w macierz znaków.⍉
transponuje macierz.↓
dzieli wiersze wynikowej macierzy na łańcuchy.źródło
K, 1 bajt
Wypróbuj tutaj!
Transponować
źródło
Mathematica, 26 bajtów
Funkcja anonimowa. Pobiera listę ciągów jako dane wejściowe i zwraca listę ciągów jako dane wyjściowe. Znak Unicode to U + F3C7, reprezentujący
\[Transpose]
. Działa poprzez konwersję do matrycy znaków, transponowanie i konwersję z powrotem do listy ciągów. Gdyby format wejściowy / wyjściowy był rozciągnięty, działałaby prosta 5-bajtowa transpozycja:źródło
\[Transpose]
.ᵀ
?⍉
.MATLAB / Octave, 4 bajty
Definiuje to anonimową funkcję. Format wejściowy to
['car'; 'dog'; 'man'; 'yay']
.Wypróbuj tutaj .
źródło
f = @(x)x'
,f([{'abcd'},{'abcd'},{'abcd'}])
wyjścia ans = „abcd” „abcd” „abcd”f(['abcd';'abcd';'abcd'])
. Zredagowałem odpowiedź, aby określić format wejściowyHaskell, 41 bajtów
Lub z odrobiną powietrza:
Druga lista to lista słów powtórzonych „długość słowa”. Na każdej liście słów wybieramy n-tą literę każdego słowa, podając wynik.
źródło
words
iunwords
. Ponadtomap(\_->l)(l!!0)
jestl<*l!!0
, więc sprowadza się do\l->zipWith($)[map(!!n)|n<-[0..]]$l<$l!!0
.l<$l!!0
(pierwszy raz źle, drugi raz dobrze), ale i tak masz rację.Common Lisp, 62 bajty
map
Funkcja przyjmuje typ wynik (tutajlist
), to funkcja f stosowania i jedną lub więcej sekwencji s1 , ..., sn . Wszystkie sekwencje są iterowane równolegle. Dla każdej krotki elementów (e1, ..., en) pobranych z tych sekwencji wywołujemy (f e1 ... en) a wynik jest kumulowany w sekwencji pożądanego typu.Bierzemy listę ciągów, powiedzmy
("car" "dog" "man" "yay")
, i używamyapply
do wywołaniamap
. Musimy to zrobić, aby lista wejściowa była używana jako więcej argumentówmap
. Dokładniej:... jest równa:
A ponieważ ciągi znaków są sekwencjami, iterujemy równolegle wszystkie pierwsze znaki, a następnie wszystkie drugie znaki itp. Na przykład pierwsza iteracja wywołuje f w następujący sposób:
Anonimowa lambda bierze listę podanych argumentów i zmusza ją z powrotem do łańcucha.
źródło
Perl, 91 bajtów
Taki długi ...
Wypróbuj tutaj!
źródło
Rubinowy, 46 bajtów
Prawdopodobnie po raz pierwszy „Rubinowe ciągi nie są Wyliczalne” w rzeczywistości mnie mocno gryzą, ponieważ przed przetworzeniem musiałem odwzorować ciągi na tablice. (Zwykle konieczność użycia
String#chars
nie wystarcza na utratę bajtu, żeby mieć znaczenie, ale ponieważ muszę je zmapować, to kłuje o wiele więcej)źródło
Clojure, 68 bajtów
Odwzorowuje funkcję, która po prostu
reduce
(przenosi elementy listy jeden po drugim i łączy n-ty znak ciągu) w zakresie od 0 do długości pierwszego ciągu.Zobacz online: https://ideone.com/pwhZ8e
źródło
C #, 53 bajty
C # lambda (
Func
) gdzie wyjście jest,IList<string>
a wyjście jestIEnumerable<string>
. Nie wiem, jak działazip
w innym języku, ale nie mogę znaleźć sposobu na użycie C # tutaj.Aggregate
dobrze pasują do potrzeb. Brak transpozycji w C #, jest jeden w Excelu, ale go nie użyję.Wypróbuj online!
źródło