Inspiracja. * Nie mogę uwierzyć, że wcześniej nie mieliśmy tego wyzwania:
Zadanie
Biorąc pod uwagę jeden lub więcej ciągów ASCII do wydrukowania, przeplataj je, pobierając po jednym znaku z każdego ciągu, cyklicznie aż do braku znaków. Jeśli w ciągu znaków zabraknie znaków przed pozostałymi, po prostu pomiń ten znak.
Przykłady
SIMPLE
daje SIMPLE
POLLS
i EPEES
dajePEOPLELESS
LYES
i APRONS
dajeLAYPERSONS
ABCDE
i a c
i 123 567
dajeAa1B 2Cc3D E567
"\n$?*
a
(pusty ciąg) i ,(.)"
(końcowe spacje) daje ",\(n.$)?"*
(końcowe spacje)
* Istnieją krótsze rozwiązania APL.
Odpowiedzi:
Galaretka , 1 bajt
Wypróbuj online!
Wbudowane „transponuj” zrobi to dokładnie z listą ciągów.
źródło
z⁶
.z
to „transponuj w lewo, dopełnienie w prawo”;⁶
jest przestrzenią.;"
(konkatenacja elementarna) rozwiązałaby zadanie bez wbudowanego.Python 2,
101898669 bajtówMam nadzieję, że uda mi się jakoś przekształcić to w lambdę, skracając ją, czyniąc rekurencyjnym.Nie jest to idealne, ponieważ można mieć nadzieję, że transpozycja jest krótsza, niestety nie jest (z tego, co udało mi się wymyślić do tej pory).Stare rozwiązania:
lambda s:''.join(''.join([c,''][c<' ']for c in x)for x in map(None,*[list(y)for y in s]))
dzięki Mathmandan za to, że poczułam się głupia;) uratował mi mnóstwo bajtów! (na starym rozwiązaniu)
źródło
while any(w):
? Puste łańcuchy są falsey w Pythonie.f=
.[]
rekurencyjne wywołanie, pozostawiającf(x[1:] for x in s)
, co czyni z niego zrozumienie generatora, które w tym kontekście działa tak samo jak lista.Perl 6 ,
3432 bajtyLambda, która przyjmuje tablicę ciągów jako argument i zwraca ciąg.
( Wypróbuj online )
źródło
@_
zamiast$_
CJam , 4 bajty
Wypróbuj online!
Możemy również napisać nienazwaną funkcję dla 4 bajtów, która oczekuje listy ciągów na górze stosu:
Wypróbuj online!
źródło
Pyth - 3 bajty
Bardzo proste, doda rozszerzenie później, na urządzeniach mobilnych.
Pakiet testowy
źródło
JavaScript (ES6),
5246 bajtówPobiera dane wejściowe jako tablicę ciągów, a dane wyjściowe jako pojedynczy ciąg.
Testowy fragment kodu
źródło
f=([[c,...s],...a])=>c?c+f([...a,s]):a+a&&f(a)
Haskell, 33 bajty
Wypróbuj na Ideone. Stosowanie:
Bez użycia wbudowanego: (
3834 bajtów)Wypróbuj na Ideone. 4 bajty wyłączone dzięki Zgarb! Stosowanie:
źródło
f a=a
bajtem, aby zapisać bajt, ponieważ oba[]
mają inny typ ... tak blisko.C,
11484 bajtów-20 bajtów za brak obliczania długości.
Akceptuje tablicę wskaźników char i wymaga, aby ostatni element był wskaźnikiem zerowym (patrz użycie).
Niegolfowane i użytkowanie:
źródło
malloc
ireturn
wcześniej, a to było dłuższe niż tylko drukowaniePHP,
6867 bajtówPętle nad argumentami wiersza poleceń. Uruchom z
-r
.Po wewnętrznej pętli
$f
jest1
gdy wszystkie ciągi zakończeniu0
innego (bitowe&
odlewane""==$c
do int).Następna iteracja zewnętrznej pętli: skopiuj
$f
do$k
(zapisuje jeden bajt$k=0
) i przełącz$f
:Gdy wszystkie łańcuchy zostaną wykonane,
$f
jest terazfalse
i pętla zostaje zerwana.źródło
Siatkówka , 13 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
Wyjaśnienie
Jest to oparte na standardowej technice transpozycji w siatkówce. Sortujemy (
O
) wszystkie znaki nieciągłe (.
), według ($#
) liczby znaków przed nimi w tej samej linii ($.%`
), tj. Ich pozycji poziomej.Drugi etap po prostu usuwa sygnały wejściowe z wejścia.
źródło
Java,
19 + 155 = 174160Nie golfowany:
Wydajność:
Pierwsza modyfikacja: połączona deklaracja ciągu w celu zaoszczędzenia niektórych bajtów. Usunięty
import
, był używany przezmain()
metodę (nie pokazano tutaj), która również potrzebowałaLinkedList
.Queue
Bezpośredniej referencji jest mniej bajtów .źródło
String f(java.util.Queue<String>q){String s,r="";for(;!q.isEmpty();r+=s.isEmpty()?"":s.charAt(0))if((s=q.poll()).length()>1)q.add(s.substring(1));return r;}
PHP, 77 bajtów
Grał w golfa
Anonimowa funkcja, która pobiera tablicę ciągów.
Jestem pewien, że można by bardziej zagrać w golfa, ale jest wcześnie. Podczas każdej iteracji pobieramy i-tą literę z każdego podanego ciągu i dołączamy go do końcowego ciągu, pojedynczo. PHP po prostu wyświetla ostrzeżenia, jeśli uzyskujemy dostęp do fragmentów ciągów, które nie istnieją, więc nie ma sprawy. Zatrzymujemy się tylko wtedy, gdy nie dokonano żadnych zmian po jednokrotnym zapętleniu wszystkich łańcuchów.
Mam ochotę na użycie
$d
golfa jest większe, ale jest wcześnie. : Pźródło
Tak właściwie ,
76 bajtówZapraszamy do gry w golfa! Wypróbuj online!
Edycja: -1 bajt dzięki pelikanowi Teal.
Ungolfing
źródło
Z♂#Σ
naZ♂Σ
wszystkie z nich. Dzięki za wskazówkę: DJavaScript (ES6), 46 bajtów
źródło
Python 2 , 58 bajtów
Wypróbuj online!
źródło
lambda *m
?J , 13 bajtów
Wypróbuj online!
Na podstawie inspiracji do tego pytania.
Innym sposobem jest 27 bajtów, ale operacja polega na transpozycji. Większość bajtów służy do obsługi automatycznie dodawanych zer od wypełnienia.
Wyjaśnienie
źródło
Narzędzia Bash + GNU, 55
I / O poprzez STDIN (rozdzielone liniami) i STDOUT.
sed
Formatuje każdej linii do zastąpienia procesu atakujących . Są one następnieeval
wprowadzanepaste
do rzeczywistego przeplatania.tr
następnie usuwa niepotrzebne znaki nowej linii i karty.Ideone.
źródło
PHP, 63 bajty
Uwaga: używa kodowania IBM-850
Uruchom tak:
Wyjaśnienie
źródło
~■
(zanegowane binarne 254) zamiast"\x1"
(binarne 1).$$
!Python 3, 75 bajtów
Wiem, że drugi Python jest krótszy, ale po raz pierwszy użyłem go
map
w życiu, więc jestem z tego dumnyźródło
C
75 75bajtówJedynym ograniczeniem jest długość wyjściowa. Obecnie wynosi 99, ale można go łatwo rozciągnąć do 999 (+1 bajt).
Nie golfowany:
źródło
Oracle SQL, 195 bajtów
Pobiera dane wejściowe z tabeli o nazwie
i
zawierającej kolumnya
(zawierające ciąg) io
(kolejność ciągu):Objaśnienie:
Wykorzystujemy to,
CONNECT BY
aby rozbić ciągi znaków na każdą z tworzących je postaci.PRIOR SYS_GUID()
będącNOT NULL
pewnym, że nie utkniemy w pętli.Następnie
LISTAGG
łączymy pojedyncze znaki, ale przetasowujemy jeORDER BY
klauzulą, uporządkując je najpierw według ich pozycji w oryginalnym łańcuchu, a dopiero potem według łańcucha, z którego pochodzą.Nie tak krótkie jak inne odpowiedzi, ale SQL nie jest tak naprawdę rozumiany jako język manipulacji ciągami :)
źródło
Python 2,
12896Miałem nadzieję, że nie będę musiał używać narzędzi itertools
Bez golfa
źródło
Perl 5 , 28 bajtów
Kod 26 bajtów + 2 dla
-0n
.Wypróbuj online!
źródło
R , 73 bajty
Wypróbuj online!
Objaśnienie: bardzo proste (ale pełne), wystarczy wykonać pętlę poprzez wydrukowanie
i
znakuj
th ciągu. Na szczęściesubstr
zwraca pusty ciąg, jeśli podano dane spoza zakresu.źródło
Python, 112 bajtów
źródło
x
iy
skąd?Perl 5 , 53 bajtów
Wypróbuj online!
metoda
Tworzy dwuwymiarową tablicę, w której liczba wierszy jest równa długości najdłuższego łańcucha, a maksymalna liczba kolumn jest równa liczbie łańcuchów. Następnie wypisz każdy wiersz tablicy bez odstępów.
źródło
TXR Lisp , 20 bajtów
Biegać:
weave
Funkcja jest leniwy, więc zwraca listę, dlatego musimy wymusić wynik ciąg. Będąc leniwym, może tkać nieskończone sekwencje. Na przykład możemy splotać parzyste i nieparzyste liczby naturalne, które same są nieskończonymi leniwymi listami:źródło
K (oK) ,
3529 bajtówRozwiązanie:
Wypróbuj online!
Przykład:
Wyjaśnienie:
Użyj indeksowania drugiego poziomu, aby wyciągnąć indeksy od 0 do maksimum (długość spłaszczonej listy) na wszystkich listach wejściowych. Wszelkie indeksowanie poza granicami listy podrzędnej zwróci wartość null. Odwróć (obraca o 90), spłaszcz, a następnie wyciągnij niepuste wyniki.
Uwagi:
i$
), aby uzyskać przydatne wartości null, ponieważ spacja () jest uważana za null dla listy znaków, co oznacza, że nie można odróżnić null od prawidłowych spacji.
źródło
Jq 1,5 , 49 bajtów
Wyjaśnienie
Przykładowy przebieg
Wypróbuj online
źródło