Biorąc pod uwagę prostokątną siatkę tekstu, ustaw w linii przekątne, które przechodzą od lewego górnego rogu do prawego dolnego rogu, do kolumn, tak aby znaki znajdujące się najdalej po prawej stronie wszystkich przekątnych znajdowały się na poziomie. Użyj wcięć do wcięcia.
Na przykład, jeśli siatka wprowadzania tekstu to
abcd
1234
WXYZ
wtedy by wyrównać przekątnych W
, 1X
, a2Y
, b3z
, c4
, i d
w kolumnach podając ten wyjściowe:
ab
123c
WXYZ4d
Zwróć uwagę, że znaki znajdujące się najdalej po prawej stronie wszystkich przekątnych WXYZ4d
, są na tym samym poziomie.
Detale
Siatka wprowadzania tekstu będzie miała rozmiar co najmniej 1 × 1, a wszystkie linie będą tej samej długości.
Możesz wziąć siatkę wejściową jako ciąg wielowierszowy lub jako listę ciągów jednowierszowych.
Siatka wejściowa będzie zawierać tylko drukowalne znaki ASCII (zawiera spację).
Dane wyjściowe mogą opcjonalnie mieć jedną końcową linię nowego wiersza, ale nie powinno być innych pustych linii.
Linie wyniku mogą opcjonalnie zawierać końcowe spacje, ale nie powinny mieć niepotrzebnych spacji wiodących.
Inne przykłady
Puste linie oddzielają przykłady. Po każdym wejściu następuje bezpośrednio jego wynik.
123
456
789
1
452
78963
123.?!
456??!
789!!!
123.
456???
789!!!!!
**@
@
**
@ @
/\/\
\/ /
/ /\
\/\/
/
\/\
/ / /
\/\/\/\
12
34
56
78
90
7531
908642
Code
Code
G
O
L
F
FLOG
~
~
Punktacja
Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
J , 12 bajtów
Definiuje anonimowy czasownik. Wypróbuj online!
Wyjaśnienie
W J
u &. v
(czytaj:u
poniżejv
) oznacza „v, następnie u, a następnie odwrotność v”. Odwrócenie i transpozycja są samoinwersjami, więc program naprawdę oznacza „odwróć, transponuj, wyciągnij odwrócone anty-przekątne, transponuj, odwróć”.Z przykładowym wejściem:
Rewers:
Transponować:
Wyodrębnij odwrócone przekątne (i podkładkę ze spacjami):
Transponować:
Rewers:
źródło
Galaretka , 11 lub 10 bajtów
Wypróbuj online!
Dość inny algorytm od mojego innego rozwiązania; ten używa wbudowanego, aby dostać się na przekątnych, zamiast robić rzeczy ręcznie.
Wyjaśnienie:
Przekątne wychodzą w możliwie najgorszej możliwej orientacji (wymagającej powtarzających się transpozycji, cofnięć i obrotów) oraz w niewłaściwej kolejności (Jelly wysyła główną przekątną jako pierwszą, więc musimy przesunąć niektóre przekątne od końca do początku, aby je zdobyć w celu). Jednak nadal wychodzi to krócej niż moje inne rozwiązanie Jelly.
źródło
CJam , 29 bajtów
Wypróbuj online!
Wyjaśnienie
Zamiast wyciągać przekątne, odrywamy warstwy od końca, naprzemiennie na lewo i na prawo. Rozważ następujące dane wejściowe:
Jeśli wypiszemy przekątne zgodnie z wymaganiami wyzwania, otrzymamy:
Zauważ, że jest to po prostu (od dołu do góry), najniższy wiersz, połączony z kolumną z prawej strony. Ta definicja działa również, jeśli wejście jest prostokątne.
źródło
]
owinie cały stos! Myślę, że funkcje powinny działać niezależnie od zawartości stosu poniżej danych wejściowych i wydaje się, że zgadzasz się ^^]
kiedy zmieniłem go na funkcję.[{)\z}h]
i zachować funkcję dla 27 bajtów.JavaScript,
116101 bajtówChciałem tylko użyć tego wzoru wzorca wyrażenia regularnego
/.$|\n?(?!.*\n)..+/gm
. ( https://regex101.com/r/mjMz9i/2 )JavaScript wyrażenia regularnego jest rozczarowujący, musiałem go użyć,
(?!.*\n)
ponieważ nie został\Z
zaimplementowany i jakoś nie mogłem go użyć\0
.źródło
.
zamiast tego,[^]
ponieważ musisz tylko pominąć znaki inne niż nowa linia, aby znaleźć nową linię, która oszczędza 2 bajty.^
to było konieczne w końcowym wyrażeniu regularnym, ponieważ i tak\n
jest już na początku łańcucha, więc zapisuje inny bajt.'$&'+' '.repeat(n)
. Zasadniczo, że wyrażenie jest po prostu$&
ale z przestrzenią dodawane każdego połączenia, które jest trywialny do wdrożenia rekurencyjnie - wymieńn=0
sięr='$&'
if(z,n+1)
zf(z,r+' ')
czymr
jest pożądany ciąg wymiana. Jeśli poprawnie policzyłem, to oszczędza 12 bajtów.Galaretka , 15 lub 14 bajtów
Wypróbuj online!
Jest to algorytm, który nie wykorzystuje wbudowanego Jelly do przekątnych. Może to skrócić czas; Mógłbym spróbować później.
Oto jak działa algorytm. Zacznijmy od tego wejścia:
Zaczynamy od
L’⁶x;\
.L’
daje nam długość wejścia minus 1 (w tym przypadku 2). Następnie⁶x
daje nam ciąg spacji o tej długości (" "
w tym przypadku); i;\
daje nam skumulowane wyniki podczas konkatenacji (trójkąt spacji). Następnie odwracamy trójkąt i konkatenujemy go do lewej strony oryginału (;"
konkatenuje odpowiednie elementy list,µ
siłą powoduje przerwanie parsowania, a tym samym domyślnie wykorzystuje oryginalne dane wejściowe jako drugą listę), dając nam to:Jest to prawie rozwiązanie, którego chcemy, ale musimy przesunąć elementy w dół, aby zrównać się z ostatnim łańcuchem. Jest to kwestia transpozycji (
Z
), odwrócenia wewnątrz każdej linii (U
), transpozycji ponownie (Z
) i odwrócenia linii (Ṛ
):transponować
odwróć w rzędach
transponować
odwrócić rzędy
Wreszcie
Y
dołącza do nowych linii. Nie jest dla mnie jasne, czy jest to wymagane, aby zachować zgodność ze specyfikacją (która pozwala na wprowadzanie danych jako listę ciągów, ale nie mówi tego samego o danych wyjściowych), więc dokładna liczba bajtów zależy od tego, czy jest uwzględniona, czy pominięta.źródło
Pyth, 16 bajtów
Big Pyth :
Ponieważ ludzie mówią, że języki gry w golfa są trudne do odczytania, zaprojektowałem Big Pyth, który jest zarówno czytelny, jak i łatwy do przetłumaczenia na Pyth. Połączony plik tłumaczy strumień wejściowy Big Pyth na Pyth. Każdy oddzielony spacjami token Big Pyth odpowiada tokenowi Pyth, znakowi lub znakowi,
.
po którym następuje znak. Wyjątkiem sąimplicit
tokeny, które są niejawne w kodzie Pyth.Chcę zobaczyć, jak dobry jest format objaśniający Big Pyth, więc nie dam żadnych innych wyjaśnień. Zapytaj mnie jednak, czy chcesz coś wyjaśnić.
źródło
JavaScript (ES6), 140 bajtów
Pobiera dane wejściowe i wyjściowe jako tablice ciągów. Akceptuje również dwuwymiarowe tablice znaków i oszczędza 7 bajtów, jeśli dwuwymiarowe tablice znaków jest dopuszczalne. Objaśnienie: Wysokość wyniku
m
jest minimalną wysokościąh
i szerokościąw
oryginalnej tablicy, podczas gdy szerokość jest po prostu o jeden mniejsza niż suma wysokości i szerokości oryginalnej tablicy. Wiersz źródłowy dla znaków w głównej części wyniku pochodzi bezpośrednio z odpowiedniego wiersza oryginalnej tablicy, licząc w górę od dołu, natomiast w dodatkowej części wyniku wiersz źródłowy przesuwa się o jeden wiersz w górę dla każdej dodatkowej kolumny. Kolumna źródłowa dla obu połówek wyniku okazuje się być równa kolumnie docelowej przesuniętej o jedną kolumnę w lewo dla każdego wiersza źródłowego nad dnem.źródło
Oktawa, 57 bajtów
źródło
Python 3, 247 bajtów
źródło
join(i) for
.Python 2, 150 bajtów
Pobiera dane wejściowe jako listę ciągów.
źródło
Clojure, 194 bajty
Zaimplementowano trudną drogę, grupując znaki,
G
a następnie generując linie.Staje się jako wejście
vec
zvec
Like[[\a \b \c \d] [\1 \2 \3 \4] [\W \X \Y \Z]]
. Przykład:źródło