Wyzwanie:
Biorąc pod uwagę listę ciągów wieloliniowych, nałóż je (w lewym górnym rogu) i wyślij wynik.
Przykład:
Wejście: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Wyjście:
cbaa
bbaa
bbaa
aaaa
Zasady konkursu:
- Format wejściowy jest elastyczny. Dozwolone jest uzyskanie danych wejściowych w postaci dwuwymiarowej listy linii (tj.
[["aaaa","aaaa","aaaa","aaaa"],["bb","bb","bb"],["c"]]
) Lub trójwymiarowej listy znaków (tj[[["a","a","a","a"],["a","a","a","a"],["a","a","a","a"],["a","a","a","a"]],[["b","b"],["b","b"],["b","b"]],[["c"]]]
.). Możesz przejąć wszystkie dane wejściowe jeden po drugim przez STDIN. Itp. - Format wyjściowy jest ścisły. Możesz wydrukować lub zwrócić ciąg wielu wierszy. (Jeśli twój język nie ma żadnych ciągów, wyświetlanie jako 2D znaków jest dozwolone jako alternatywa. Ale tylko jeśli twój język w ogóle nie ma ciągów.)
- Kolejność listy danych wejściowych jest oczywiście ważna (ale jeśli chcesz, możesz wprowadzić dane w odwrotnej kolejności).
- Wejścia będą zawierać tylko drukowalne ASCII w zakresie Unicode (
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
). - Wejściami będą tylko prostokąty (więc żadne dziwne kształty). Dane wyjściowe nie są jednak niezbędnymi prostokątami.
- Dozwolone są końcowe spacje i pojedyncza nowa linia. Wiodące spacje i / lub znaki nowej linii nie.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Wejście: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Wyjście:
cbaa
bbaa
bbaa
aaaa
Wejście: ["12345\n54321","00\n00\n00\n00","001\n011\n012"]
Wyjście:
00145
01121
012
00
Wejście: ["sm\noo\nmr\nee\nt!\nh_\ni_\nn_\ng_","!@#$%^\n&*()_+\nqwerty\nuiopas","this\nis_a\ntest"]
Wyjście:
this%^
is_a_+
testty
uiopas
t!
h_
i_
n_
g_
Odpowiedzi:
Galaretka , 3 bajty
Wypróbuj online!
Dawno nie używałem Jelly, ale myślałem, że wyzwanie w komentarzach było do pokonania. Bardzo bezpośrednio używa logicznego i (
a
) do wykonania operacji układania między poszczególnymi elementami input (/
).Y
służy do drukowania w wymaganym formacie.źródło
ḷ""/Y
odwróconą listę wejść. Nawet nie wiedziałem oa
...JavaScript (Node.js) , 24 bajty
Zaoszczędź 2 bajty dzięki @Grimy
Zakłada, że zwracany ciąg jest drukowany na terminalu obsługującym kody specjalne ANSI . Zawiera znak ESC, którego nie można wydrukować , który jest uciekany (nie jest przeznaczony gra słów), jak
\x1B
poniżej.To nie działa w TIO, ale możesz wypróbować online! zamiast tego zobaczyć surowe dane wyjściowe.
W jaki sposób?
Zastosowane sekwencje CSI to:
ED (Erase in Display):
ESC[2J
gdzie2) oznacza „wyczyść cały ekran”
CUP (pozycja kursora):
ESC[H
co oznacza „przesuwa kursor do wierszan , kolumny m ”, gdzie zarówno n jak i m są pomijane i domyślnie ustawione na 1 (lewy górny róg ekranu).
Przykładowe dane wyjściowe
źródło
;
. Myślę też, że powinien to być „JavaScript + terminal” lub coś podobnego, co nie konkuruje z czystym JavaScript.if the last parameter sub-string(s) is empty, the separator preceding it may be omitted
. Ponieważ istnieją tylko dwa podłańcuchy, separator poprzedzający ostatni podłańcuch jest jedynym i można go pominąć.\x1B[H
konieczne jest pierwsze +? Czy nie zaczyna się domyślnie od lewego górnego rogu i trzeba go zresetować tylko po każdym wejściu (co właśnie robi łączenie)? Czy może początkowo zaczyna się gdzieś indziej i musisz wyraźnie pozwolić mu rozpocząć od tej pozycji kursora, aby pomyślnie powrócił do tej pozycji w złączeniu?f=a=>print(`\x1B[H`+a.join`\x1B[H`)
zef(input_here)
będzie produkować taki sam efekt jakprint(f(input_here))
? Więc nie rozumiem, dlaczego nie pozwolono by ci pominąćprint
i po prostu zwrócić ciąg.R ,
120,111110107 bajtówWypróbuj online!
Funkcja akceptująca listę macierzy znaków (akceptowane jest wprowadzanie 3D).
(jak widać z liczby bajtów, nie jest to bardzo łatwe w R ...)
źródło
array
zamiastmatrix
!ncol
(możesz transponować, aby uzyskaćnrow
).Python 2 , 88 bajtów
Wypróbuj online!
Objaśnienie (z przykładem):
Pobiera na wejściu listę 2D.
Najpierw lista wejściowa jest skompresowana, aby uzyskać wiersze każdego prostokąta wejściowego (
map(None,l)
jest tak samo długa jak zip):Każdy z tych wierszy jest następnie filtrowany w celu usunięcia
None
s i ponownie skompresowany:Która jest listą znaków dla każdej pozycji pożądanego wyniku. Te listy są ponownie filtrowane, a ostatnia jest pobierana:
Na koniec powstałe listy są łączone i drukowane:
źródło
R,
10797 bajtówNie działa na TIO, co może być związane z używaniem
\r
znaku powrotu karetki. Działa na mojej lokalnej instalacji R.Pobiera dane wejściowe jako listę zawierającą wektor wierszy:
Pętle nad rzędami każdego prostokąta, po każdym wypisuje powrót karetki, ponownie uruchamiając linię.
Jeśli nieco rozciągniemy reguły, możemy zrezygnować ze sprawdzania długości danych wejściowych i po prostu zapętlać nieskończenie, drukując ogromną liczbę znaków nowego wiersza:
R, 85 bajtów
źródło
\r
i witamy ponownie! Tylko uwaga, myślę, że działa to tylko w interaktywnych sesjach R (gdyinteractive()
zwraca true)rscript
wiersza polecenia. Podejrzewam, że jest to kwestia systemu Windows / Linux, ponieważ system Windows używa\r\n
dla nowych linii i Linuksa\n
.APL (Dyalog Unicode) , 22 bajty SBCS
Anonimowa funkcja ukrytego prefiksu przyjmująca listę argumentów tablic znaków 2D. Wydruki
Wypróbuj online!
Działa to poprzez utworzenie obszaru roboczego, a następnie dołączenie go do listy bloków i zmniejszenie (składanie) za pomocą funkcji umieszczającej bloki w rogu.
↑
mieszaj blok 2D, aby utworzyć prostokątny blok 3D, wypełniając je spacjami w razie potrzeby1⌷
weź pierwszą warstwę⊂
załącz,∘
a następnie⌽,
dodaj odwróconą listę bloków(
…)
Zastosuj następującą funkcję ukrytą:{
…}/
Zredukuj używając następującej anonimowej lambda:⊢⍵
z właściwym argumentem jako płótno…⍺@(
…)
Poprawiając elementy lewego argumentu umieszczonego przy następujących indeksach:⍴⍺
kształt lewego argumentu⍳
z ɩ ndices tablicy tego kształtu⊃
ujawnić (ponieważ redukcja zawarta w celu zmniejszenia rangi)źródło
Haskell, 66 bajtów
Wejście jest brane jako lista listy ciągów w odwrotnej kolejności, na przykład dla pierwszego przypadku testowego:
[["c"],["bb","bb","bb"],["aaaa","aaaa","aaaa","aaaa"]]
.Wypróbuj online!
źródło
05AB1E , 12 bajtów
Rozwiązanie portu Python TFeld
2 bajty zapisane dzięki Grimy
Wypróbuj online!
Wyjaśnienie
Alternatywna wersja 14-bajtowa
Wypróbuj online!
Wyjaśnienie
źródło
--no-lazy
jest to poprawka polegająca na tym, że nadal używa się mapy / filtra z nadrukiem dla niejawnegoy
, aby zaoszczędzić bajt w porównaniu dovy...,
:) Wiedziałem, że działa w starszej wersji, ale w nowej wersji wyświetli również[...]
. Nie wiedziałem, że to z powodu braku--no-lazy
. ;) Jeśli chodzi o samą odpowiedź, bardzo miło! Wiedziałem, że skumulowane obniżenie jest konieczne, ale tak naprawdę nie mogłem tego zrobić, kiedy sam tego spróbowałem. Sprawiasz, że wygląda to tak łatwo ..õζεõK
może byćζεðK
,õζõδK
może byćζðδK
.Płótno , 5 bajtów
Wypróbuj tutaj!
Jeśli nakładanie
/
+\
→X
,-
+|
→+
itd. Byłoby w porządku, działałyby 2 bajty .źródło
Python 2 , 77 bajtów
Wypróbuj online!
źródło
PowerShell 6 , tylko konsola, 20 bajtów
na podstawie odpowiedzi Arnaulda . Działa tylko z konsolą i nie działa na TIO.
Wypróbuj online!
PowerShell , 103 bajty
Wypróbuj online!
Rozwinięty:
źródło
C # (.NET Core) , 68 + 23 = 91 bajtów
23 bajty przeznaczone są na import,
using C=System.Console;
Nie działa w TIO, ponieważ nie jest konsolą.
Wypróbuj online!
źródło
Rubinowy , 67 bajtów
Dane wejściowe to lista wierszy. Tworzy listę linii i nadpisuje, gdy przechodzi przez dane wejściowe, a następnie łączy je z nową linią (reprezentowaną przez zmienną
$/
) na końcu, aby dopasować ścisłe wyjście.Wypróbuj online!
źródło
C (GCC, MinGW) 138 bajtów
Zakłada, że CR umieszcza kursor na początku bieżącej linii.
Testowane z:
źródło
Oktawa ,
7167 bajtówFunkcja, która pobiera pionową tablicę komórek macierzy znaków i zwraca macierz znaków.
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
źródło
JavaScript (przeglądarka) ,
216208204 bajtówMoja próba tego. Nie jestem zadowolony z tego rozmiaru i na pewno musi być coś więcej do poprawy, ale nie mam tak dużego doświadczenia w golfie.
W każdym razie to, co robi, najpierw dzieli wszystkie ciągi, następnie odwraca wszystkie ciągi, a następnie zapętla operację redukcji zapętla Rozpocznij wszystkie struny razem. Następnie ponownie odwróć wszystkie ciągi, a następnie połącz je ponownie z nowymi liniami.
Specjalne podziękowania dla Kevina Cruijssena za przypomnienie, że ostatnia część pętli for ma miejsce na końcu, a łączna oszczędność bajtów wynosi 8 bajtów.
źródło
('')
mogą być dwa, aby zaoszczędzić cztery bajty :)for(i=0;i<b.length;i++){j=a[i];if(!j)j=b[i];a[i]=b[i].padStart(j.length,j)}
zfor(i=0;i<b.length;a[i]=b[i++].padStart(j.length,j))if(!(j=a[i]))j=b[i];
.j
Najpierw przypisany(j=a[i])
, wówczas if-oświadczenie odbywa sięif(!...)j=b[i];
(gdzie...
jest(j=a[i])
, więc zaktualizowanej wartościj
), a następnie;a[i]=b[i++].padStart(j.length,j))
odbywa się na koniec do pętli iteracji .. Nie wiem gdzie jest problem, i wydaje się działać?C (gcc) ,
5147 bajtówWypróbuj online!
-4 bajty dzięki pułapkowi cat.
Wykorzystuje sekwencje CSI do zapisywania / przywracania pozycji kursora. Wystarczy iterować po przekazanej tablicy ciągów (w tym samym formacie co
argv
) i drukuje<save position>string<restore position>
dla każdego.To powoduje pozostawienie kursora w lewym górnym rogu, dlatego podczas uruchamiania na terminalu ważne jest, aby później pozostawić wystarczającą liczbę znaków nowej linii, aby monit nie blokował danych wejściowych.
źródło
Japt
-P
, 7 bajtówPobiera dane wejściowe jako tablicę ciągów wieloliniowych, generuje pojedynczy ciąg wielu linii.
Spróbuj
źródło
Zapytanie T-SQL,
297295 bajtówUżycie ¶ jako separatora i zmiennej tabeli jako danych wejściowych.
Wypróbuj online
źródło
JavaScript (przeglądarka),
129124 bajtówMoja pierwsza próba gry w golfa kodowego. Czytam linki podane w regulaminie (luki, standardowe zasady ...), więc mam nadzieję, że zrobiłem coś złego!
Zachowałem dane wejściowe tak, jak są w pierwszym poście (forma płaskiej tablicy).
Podziękowania dla Kevina Cruijssena za oszczędność 5 bajtów.
Testy:
Pokaż fragment kodu
źródło
for(a of o){for(l in a){b=a[l],r[l]=(r[l])?b+r[l].slice(b.length):b}}
może byćfor(a of o)for(l in a)b=a[l],r[l]=r[l]?b+r[l].slice(b.length):b;
:)=(r[l])?
który można usunąć do=r[l]?
:)r
. Bez tego wynik mapowania zostałby zwrócony.Pyth , 18 bajtów
Wypróbuj online! (uwaga: sam kod ocenia tylko jeden blok, tryb zestawu testów tłumacza uruchamia program jeden raz dla każdego wiersza wprowadzania)
Na podstawie rozwiązania Python 2 firmy TFeld .
Wyjaśnienie:
wyjaśnienie, dlaczego sam algorytm działa, patrz odpowiedź TFeld.
źródło
Węgiel drzewny , 4 bajty
Wypróbuj online (pełne) lub wypróbuj online (czyste) .
Wyjaśnienie:
Pętla nad listą wejściową ciągów wieloliniowych:
I wydrukuj ciąg wielu linii bez przesuwania kursora:
źródło