f={t=_this;c=count(t select 0);e=[0];i=0;while{i<c*2}do{e=e+[0];i=i+1};m=[e];i=0;while{i<count t}do{r=+e;j=0;while{j<c}do{r set[j*2+1,(t select i)select j];j=j+1};m=m+[r,e];i=i+1};m}
Nie golfowany:
f=
{
// _this is the input matrix. Let's give it a shorter name to save bytes.
t = _this;
c = count (t select 0);
// Create a row of c*2+1 zeros, where c is the number of columns in the
// original matrix.
e = [0];
i = 0;
while {i < c*2} do
{
e = e + [0];
i = i + 1
};
m = [e]; // The exploded matrix, which starts with a row of zeros.
i = 0;
while {i < count t} do
{
// Make a copy of the row of zeros, and add to its every other column
// the values from the corresponding row of the original matrix.
r = +e;
j = 0;
while {j < c} do
{
r set [j*2+1, (t select i) select j];
j = j + 1
};
// Add the new row and a row of zeroes to the exploded matrix.
m = m + [r, e];
i = i + 1
};
// The last expression is returned.
m
}
Zadzwoń z:
hint format["%1\n\n%2\n\n%3\n\n%4",
[[1]] call f,
[[1, 4], [5, 2]] call f,
[[1, 4, 7]] call f,
[[6],[4],[2]] call f];
Wydajność:
W duchu wyzwania:
Galaretka ,
1211 bajtów-1 bajt dzięki Erikowi Outgolferowi (nie trzeba używać zamienionych argumentów do łączenia)
Wypróbuj online! Lub zobacz pakiet testowy .
Monadyczny link przyjmujący i zwracający listy list.
W jaki sposób?
źródło
j00,0jµ€Z$⁺
Haskell , 38 bajtów
Wypróbuj online!
źródło
MATL , 12 bajtów
Dane wejściowe to macierz z
;
separatorem wierszy.Wypróbuj online!
Wyjaśnienie
źródło
Japt , 18 bajtów
Przetestuj online! (Używa
-Q
flagi, aby wynik był łatwiejszy do zrozumienia.)Podobne do odpowiedzi Jelly, ale o wiele dłużej ...
Wyjaśnienie
Zewnętrzna część kodu jest tylko obejściem symulującym działanie Jelly
⁺
:Sam kod to:
Powtórzony dwukrotnie proces ten daje pożądany wynik. Wynik zostanie domyślnie wydrukowany.
źródło
Łuska , 12 bajtów
Pobiera i zwraca tablicę liczb całkowitych 2D. Wypróbuj online!
Wyjaśnienie
Taki sam pomysł jak w wielu innych odpowiedziach: dodaj zera do każdego wiersza i transponuj dwukrotnie. Operacja na rzędzie jest realizowana za pomocą złożenia.
źródło
Mathematica, 39 bajtów
Wypróbuj w piaskownicy Wolfram! Nazwij to jak „
r=Riffle[#,0,{1,-1,2}]&/@Thread@#&;r@*r@{{1,2},{3,4}}
”.Podobnie jak wiele innych odpowiedzi, działa to poprzez transpozycję i riffowanie zer w każdym rzędzie, a następnie powtórzenie tego samego. Zainspirowany żelową odpowiedzią Jonathana Allana , ale tylko dlatego, że najpierw zobaczyłem tę odpowiedź.
źródło
Dyalog APL, 24 bajty
4 bajty zapisane dzięki @ZacharyT
5 bajtów zapisanych dzięki @KritixiLithos
Wypróbuj online!
źródło
1,1,⍴⍵
, prawda?{{⍵↑⍨-1 1+⍴⍵}⊃⍪/,/2 2∘↑¨⍵}
o 261 1+
!1+
działałoby?Oktawa, 41 bajtów
Wypróbuj online!
źródło
Python 3 ,
104 101 97 9386 bajtóww
usunięta i jedno niechciane miejsce[a,b]
tak jaka,b
podczas dołączania do listyWypróbuj online!
źródło
w
i zapisać 2 bajty: repl.it/JBPEm+=[r,w]
[j,0]
naj,0
i[r,m[0]
nar,m[0]
?for
wcięcie pętli na pojedynczą kartę.Python 3, 118 bajtów
Pierwszy raz w golfa! Nie najlepsze, ale jestem dość dumny, jeśli sam mogę to powiedzieć!
źródło
+=
i=
otoczone są przestrzenie, które mogą być usunięte. Ponadto robienie tego+=
dwa razy z rzędu można uprościć w jednym oświadczeniu, na przykłade+=str(d)+'0'
for
pętlę w jedną linięfor d in c:e+=str(d)+'0'
, ale możesz chcieć iść z mapą łączenia (str, d)) + „0”, in which case it becomes pointless to define
e w ogóle.z
ir
na tej samej linii (;
pomiędzy nimi), oszczędzając bajt wcięcia.R, 65 bajtów
Dziękujemy Jarko Dubbeldam i Giuseppe za bardzo cenne komentarze!
Kod
Dane wejściowe dla funkcji muszą być macierzą lub tablicą dwuwymiarową.
Test
Wydajność
źródło
a=dim(x)*2+1
zamiastnrow
incol
byłoby lepsze. Możesz wtedy zrobićy=matrix(0);dim(y)=a
i2*1:a[1],2*1:a[2]
.y=array(0,a)
byłby jeszcze krótszy.2*1:a[1]
Ponieważ:
ma wyższy priorytet niż*
Mathematica, 55 bajtów
źródło
o={0,0}
można zmniejszyć doo=0{,}
PHP , 98 bajtów
Dane wejściowe jako tablica 2D, dane wyjściowe jako ciąg
Wypróbuj online!
PHP , 116 bajtów
Wejście i wyjście jako tablica 2D
Wypróbuj online!
źródło
Clojure, 91 bajtów
Iteruje ponad zakresami w pół kroku.
źródło
Perl 6 , 33 bajtów
Wypróbuj online!
źródło
Python 2 , 64 bajty
Wypróbuj online!
Funkcja
g
przeplata dane wejściowe między zerami. Główna funkcja transponuje dane wejściowe podczas stosowaniag
, a następnie robi to ponownie. Być może istnieje sposób na uniknięcie powtórzeń w głównej funkcji.źródło
JavaScript (ES6),
7372 bajtySformatowane i skomentowane
Wstawianie zer poziomo i pionowo to bardzo podobne operacje. Chodzi tutaj o użycie tej samej funkcji g () dla obu kroków.
Przypadki testowe
Pokaż fragment kodu
źródło
Węgiel drzewny , 49 bajtów
Wypróbuj online!
Dane wejściowe to pojedynczy ciąg oddzielający wiersze średnikiem.
źródło
≔E⪪θ;⪫00⪫ι0θFθ⟦⭆ι0ι⟧⭆⊟θ0
ale nawet unikając StringMap nadal myślę, że można to zrobić w 27 bajtach.Moduły C ++ 17 +, 192 bajty
Wprowadź jako wiersze ciągów od cin , Wyjście do cout
źródło
C # , 146 bajtów
Dane
Int32[,]
m
Matryca do rozbiciaInt32[,]
Rozłożona matrycaGrał w golfa
Bez golfa
Nieczytelny czytelny
Pełny kod
Wydawnictwa
146 bytes
- Wstępne rozwiązanie.Notatki
źródło
(int[,] m)=>
,m=>
wystarczy, jeśli podasz, że twoja odpowiedźm
to int-array 2D. Można także zmienić,x,
się,x=0,
i pozbyć sięx=0
w inicjalizacji dla pętli do -1 bajt. I możesz usunąćy++
z wewnętrznej pętli, zmieniając=m[x,y];
na=m[x,y++];
na dodatkowy bajt -1. Ale daj +1 ode mnie, a jeśli utworzę port Twojej odpowiedzi, jest on również krótszy niż moja obecna odpowiedź Java. :)Dyalog APL, 24 bajty
Wszelkie ulepszenia są mile widziane i potrzebne!
źródło
Python 2 , 92 bajty
Wypróbuj online!
źródło
Python 3 + Numpy , 87 bajtów
Wypróbuj online!
źródło
JavaScript (ES6),
8078 bajtówźródło
Pyth, 13 bajtów
Demonstracja
Kolejne 13:
źródło
APL (Dyalog) , 22 bajty
Monity o macierz, zwraca zamkniętą macierz.
Wypróbuj online!
a←⎕
szybka na matrycy i przypisać do A⍴
wymiary a (wiersze, kolumny)2×
pomnóż przez dwa1+
Dodaj jeden⍴∘0 1¨
używać każdego z r eshape (cyklicznie) numery odpowiednio zerem i jedynką{
…}/
Zmniejsz, wstawiając następującą anonimową funkcję między dwiema liczbami:⍵\a
rozwiń * kolumny a według prawego argumentu⍺⍀a
rozwiń * wiersze tego zgodnie z lewym argumentem* 0 wstawia kolumnę / wiersz zer, 1 wstawia oryginalną kolumnę danych / wiersz
źródło
Java 8,
183166162129 bajtówWejście i wyjście jako
int[][]
.-33 bajtów, tworząc port odpowiedzi C # @auhmaan .
Wyjaśnienie:
Wypróbuj tutaj.
źródło
J , 24 bajty
Wypróbuj online!
źródło
05AB1E , 22 bajty
Wypróbuj online!
Właściwie używa tego samego kodu 2x, więc mogę zapisać go jako ciąg i użyć Eval dla -10 bajtów.
źródło