Rip-off z rip-off z rip-off z rip-off . Głosujcie za tymi!
Twoim zadaniem, jeśli chcesz to zaakceptować, jest napisanie programu / funkcji, która wyprowadza / zwraca dane wejściowe / argument¹. Problem polega na tym, że jeśli transponuję kod źródłowy², wynik / wynik również musi zostać transponowany.
Możesz wybrać, jaki rodzaj danych 2D może zaakceptować twoje rozwiązanie. Na przykład lista list, macierz, lista ciągów itp. Określ, który z nich obsługuje. Możesz założyć, że wejście będzie zawsze prostokątne i będzie miało długość 1 lub więcej wzdłuż każdego wymiaru.
Do celów transpozycji krótkie linie w kodzie źródłowym będą traktowane jako dopełniane spacjami końcowymi, dopóki nie będą prostokątne, jednak te dopełniane spacje końcowe nie wpływają na długość kodu.
Ponieważ jest to kod-golf , celem jest optymalizacja liczby bajtów oryginalnego kodu źródłowego (nie transponowanej wersji).
Przykłady
Załóżmy, że twoje rozwiązanie przyjmuje macierz numeryczną, a kod źródłowy to
AB
DEF
a jego wejście / argument to [[1,2],[3,4],[5,6]]
. Jeśli napiszę
AD
BE
F
zamiast tego i uruchom go, wyjście / wynik musi być [[1,3,5],[2,4,6]]
.
Załóżmy, że Twoje rozwiązanie pobiera ciąg oddzielony od linii, a kod źródłowy to
ABC
a jego wejście / argument to "96\n"
. Jeśli napiszę
A
B
C
zamiast tego i uruchom go, wyjście / wynik musi być "9\n6\n"
.
Odpowiedzi:
Python 3 + numpy, 45 bajtów
Wypróbuj online!
Dzięki @EriktheOutgolfer wskazując błąd poprzedniej wersji
Transponowano:
Wypróbuj online!
Funkcje pobierają macierz liczbową jako dane wejściowe i wyjściowe. Rozwiązanie nie opiera się na komentarzach, jak wiele innych rozwiązań, ale zamiast tego wykorzystuje ciągi wieloliniowe.
źródło
\
wyrzuci aSyntaxError
. Aby to naprawić, musisz przenieść cytaty w obu kierunkach.Galaretka , 2 bajty
Dane wejściowe to lista list. Podziękowania dla Luisa Mendo i Nicka Kennedy'ego za poprawę odpowiedzi.
Wypróbuj online! Spróbuj transponować!
Program transponuje dane wejściowe dwukrotnie, zwracając oryginalne dane wejściowe. Wersja transponowana ignoruje pierwszą linię i transponuje tylko raz.
źródło
R ,
54 bajtówWypróbuj online!
Funkcja R, funkcja tożsamości
I
lub funkcja transpozycjit
transpozycji po transpozycji. Stopka na TIO pokazuje wyniki obu.Dzięki @RobinRyder za uratowanie bajtu!
źródło
#
.C (gcc) ,
209205203201 bajtówNormalna
Wypróbuj online!
Transponowane
Wypróbuj online!
źródło
Haskell , 51 bajtów
Ta wersja jest ważna, ale nie zostanie zatrzymana, gdy zostanie podana
[]
jako dane wejściowe.Wypróbuj online!
Transponowano, 75 bajtów
Wypróbuj online!
Haskell , 51 bajtów
Ta wersja jest poprawna, ale ulega awarii
[]
jako dane wejściowe dla transponowanej wersji.Wypróbuj online! Transponowane
Haskell ,
756757 bajtówCo najmniej 7 bajtów zaoszczędzonych dzięki Ørjanowi Johansenowi
Ta wersja wyświetla się,
[]
gdy jest podawana[]
jako dane wejściowe.Wypróbuj online!
Transponowane
źródło
Python 3 , 51 bajtów
Wypróbuj online!
Na podstawie podejścia Joela . Wejście jest
tuple
wtuple
s, a wyjście jestzip
(w przeliczeniu na Atuple
ciągu TIO dla lepszej widoczności).Transponowano:
Wypróbuj online!
źródło
Perl 6 ,
2011 bajtówWypróbuj online!
Transponowane
Wypróbuj online!
Obie funkcje działają na liście list.
*[ ]
jest kodem typu WhthingCode zwracającym plasterek zen argumentu, skutecznie funkcją tożsamości.&[Z]
jest operatorem zip.źródło
Haskell,
185161 bajtówWypróbuj online!
Transponowano:
Wypróbuj online!
Bez komentarzy, bez literałów łańcuchowych, tylko dodatkowe definicje funkcji.
Edycja: -24 bajty dzięki @ Ørjan Johansen.
źródło
PHP (7.4),
1148670 bajtówMoje pierwsze doświadczenie z robieniem czegoś takiego w PHP, musi istnieć lepszy sposób, którego nie widzę! Dane wejściowe to tablica tablic takich jak
[[1,2],[3,4],[5,6]]
.Normalna:
Wypróbuj online!
Transponowane (wypełnione spacją):
Wypróbuj online!
źródło
Węgiel drzewny , 19 bajtów
Wypróbuj online! Pobiera dane wejściowe jako tablicę ciągów. Objaśnienie:
A
domyślnie wypisuje jawne dane wejściowe, podczas gdy¿⁰
jest warunkowy, a0
jako warunek, który dlatego zawsze jest fałszywy.«
następnie uruchamia blok bezsensownego kodu Charcoal, który nigdy nie zostanie wykonany. (Może być możliwe usunięcie niektórych z tych bajtów, ale w takim przypadku nie jestem pewien, czy Charcoal poprawnie przeanalizuje program). Transponowane, 17 bajtów:Wypróbuj online! Objaśnienie: Podobnie jak w poprzednim programie, z wyjątkiem dodania polecenia transpozycji
‖↗
.Mam alternatywne rozwiązanie, w którym zarówno oryginalny, jak i transponowany program ma 18 bajtów:
Wypróbuj online! Objaśnienie:
A
jak wyżej;⊞υ
wypycha wartość do predefiniowanej pustej listy (co nie wpływa na dane wyjściowe);”y
rozpoczyna dowolny ciąg znaków (kończy się na końcu programu lub dopasowania”
). Transponowano:Wypróbuj online! Objaśnienie:
A‖↗
jak wyżej;⊞υ
jak wyżej; niewielką różnicą tutaj jest to, że pcham konkatenacje mniejszych ciągów, ponieważ nie chcę powtarzać”
.źródło
Brain-Flak (BrainHack) ,
382375337 bajtówBez komentarza!
Wypróbuj online!
Dla danych wejściowych pierwsze dwie liczby oznaczają wymiary macierzy, a pozostała część to zawartość macierzy. Dane wyjściowe są podawane w tym samym formacie.
Transponowane
Brain-Flak (BrainHack) , 465 bajtów
Wypróbuj online!
źródło
Japt , 2 bajty
Wypróbuj | Transponowane
źródło
JavaScript (Node.js) , 62 bajty
Wypróbuj online!
Ulepszony o inny układ
źródło
Haskell ,
153144 bajty(dzięki, Sriotchilism O'Zaic )
Wypróbuj online!
Spróbuj transponować!
źródło
foldr
rekurencji dla obu wersji), nie podoba mi się to.APL (Dyalog Unicode) , 7 bajtów
Wypróbuj online!
Transponowano:
Prawdopodobnie dość nudna odpowiedź, ale i tak tu jest.
Definicja funkcji wbudowanej
{...}
może obejmować wiele linii. W takim przypadku każda linia jest wykonywana sekwencyjnie, ale każda linia bez przypisania←
natychmiast zwraca obliczoną wartość. Tak więc pierwsza funkcja powraca,⍵
a druga wraca⍉⍵
.Jeszcze bardziej nudną odpowiedzią byłoby nadużycie komentarza:
APL (Dyalog Unicode) , 4 bajty
Chyba nie jest potrzebne TIO ...
źródło
05AB1E , 3 bajty
Wypróbuj online.
Spróbuj transponować.
Wyjaśnienie:
W przeciwieństwie do niektórych innych języków, znaki nowego wiersza są po prostu ignorowane w 05AB1E, więc nie sądzę, że 2-bajtowe jest możliwe (chociaż chciałbym, aby udowodniono, że się mylę).
źródło
Rubin , 35 bajtów
Wypróbuj online!
Biodro ma być kwadratowe! (Prawie)
Akceptuje ruby macierzy jako dane wejściowe (tablice tablic)
źródło
Czysty , 64 bajty
Wypróbuj online!
Spróbuj transponować!
źródło
Python 3 ,
11895 bajtówDane wejściowe i wynikowe to listy krotek.
Wypróbuj online!
źródło
Wolfram Language (Mathematica) , 13 bajtów
Wypróbuj online! / Transponowane
źródło
Cjam , 13 bajtów
Wypróbuj online!
Wersja transponowana:
Wypróbuj online!
Format wejściowy
Format wejściowy to standardowy format macierzy CJam:
[[1 2] [3 4]]
Wersja bez awarii, 12 bajtów
Normalna wersja ulega awarii po wydrukowaniu tablicy. Wersja, która nie ulega awarii to:
Wypróbuj online!
lub transponowane:
Wypróbuj online!
Prawdopodobnie jest kilka dodatkowych bajtów, które można zapisać, przypadkowo najpierw pracowałem nad transponowaną wersją, co doprowadziło do kilku dodatkowych podziałów linii i minęło dużo czasu, odkąd ostatnio użyłem CJam. Wszelkie ulepszenia są mile widziane.
źródło
Zsh , 75 bajtów
TIO: normalna transponowana
Śmieci pod głównym drukiem są nieszkodliwe, drukuje błąd przy napotkaniu nowej linii po
fa<
i wychodzi. 86 bajtów, aby usunąć ten błąd.Wersja transponowana jest tutaj. Po wydrukowaniu wyświetla błąd na
<
końcu linii i kończy działanie.źródło
Runiczne Zaklęcia , 88 bajtów
Wypróbuj online!
Spróbuj transponować!
Dane wejściowe są oddzielone spacjami dla każdej wartości i oddzielone przecinkami dla każdego wiersza (znaki nowej linii są opcjonalne) i obsługuje zarówno ciągi, jak i (niezerowe) liczby. Ułatwia to analizowanie danych wejściowych, ponieważ dane wejściowe są automatycznie przerywane spacjami i znakami nowej linii. Na przykład dane wejściowe:
Byłby reprezentowany w formie zagnieżdżonej tablicy jako
[[1,2,3],[4,5,6],[7,8,9]]
. Minimalna obsługa tablic poszarpanych (tylko ostatnia może być krótka), ale ponieważ dane wejściowe powinny być prostokątne, spełnia to wymaganie.Dane wyjściowe są reprezentowane w tym samym formacie (wersja transponowana wyświetla znaki nowej linii, ale bajty zerowe różnią się od siebie, aby zamiast tego użyć spacji). Wersja normalna ma spację końcową, wersja transponowana ma przecinek końcowy i znak nowej linii (z powodu trudności z określeniem, kiedy nie ma już danych do wydrukowania).
Normalna wersja ma znaki modyfikujące w dziwnych miejscach (np.
7̸0
), Ale wynika to z potrzeby ich umieszczenia we właściwym miejscu, gdy źródło jest transponowane, a normalne wykonanie wykorzystuje tylko lewą kolumnę instrukcji.Wyjaśnienie
Wyjaśnienie transponowanego źródła będzie miało formę bez transpozycji. Strzałki będą reprezentować kierunkowość IP na wejściu i wyjściu z różnych bloków.
Dane wejściowe są odczytywane, a po
,
znalezieniu znaku wypychana jest nowa podstacja. Dzięki temu każdy stos może przechowywać każdy wiersz osobno w pamięci. Przechodzi do następnej sekcji od góry.[0
(wykonywane w lewo) ustawia pusty stos, który działa jak granica między pierwszym rzędem a ostatnim rzędem, a następnie obraca się do pierwszego stosu ({̹
) i rozpoczyna drukowanie elementów i obracanie stosów. Niei!
jest wykonywany i{̹L [0r
jest wykonywany tylko raz. Gdy zostanie znaleziony stos o zerowym rozmiarze, pętla kończy się.Po znalezieniu pustego stosu
,
drukowane są znaki ai nowa linia, a pętla wartości jest ponownie wprowadzana. Kolejność wykonywania (dublowane dla czytelności) gdzie.
jest komenda un-stracony:\',$!.6ak$?....../
. Zmianaak
na'<space>
wypisuje spacje zamiast nowego wiersza.Wykonanie zatrzymuje się, gdy program próbuje pisać z pustego stosu; dlatego tylko jagginess w ostatnim rzędzie działa poprawnie i dlaczego
,
na wyjściu występuje ciąg : przecinek został już wydrukowany, zanim program dowie się, że nie ma już żadnych danych.źródło