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}
Tidak Disatukan:
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
}
Telepon dengan:
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];
Keluaran:
Dalam semangat tantangan:
Jelly ,
1211 byte-1 byte terima kasih kepada Erik the Outgolfer (tidak perlu menggunakan argumen swapped untuk bergabung)
Cobalah online! Atau lihat suite tes .
Tautan monadik yang menerima dan mengembalikan daftar daftar.
Bagaimana?
sumber
j00,0jµ€Z$⁺
Haskell , 38 byte
Cobalah online!
sumber
MATL , 12 byte
Input adalah matriks dengan
;
pemisah baris.Cobalah online!
Penjelasan
sumber
Japt , 18 byte
Uji secara online! (Menggunakan
-Q
bendera agar hasilnya lebih mudah dimengerti.)Mirip dengan jawaban Jelly, tapi jauh lebih lama ...
Penjelasan
Bagian luar kode hanyalah solusi untuk mensimulasikan Jelly's
⁺
:Kode itu sendiri adalah:
Diulang dua kali, proses ini memberikan output yang diinginkan. Hasilnya dicetak secara implisit.
sumber
Sekam , 12 byte
Mengambil dan mengembalikan array integer 2D. Cobalah online!
Penjelasan
Gagasan yang sama seperti di banyak jawaban lain: tambahkan nol ke setiap baris dan transpos, dua kali. Operasi baris diimplementasikan dengan flip.
sumber
Mathematica, 39 byte
Cobalah di kotak pasir Wolfram! Sebut saja seperti "
r=Riffle[#,0,{1,-1,2}]&/@Thread@#&;r@*r@{{1,2},{3,4}}
".Seperti banyak jawaban lain, ini bekerja dengan mentransposisi dan mengacak nol di setiap baris kemudian melakukan hal yang sama lagi. Terinspirasi oleh jelly Jonathan Allan yang menjawab secara spesifik, tetapi hanya karena saya kebetulan melihat jawaban itu terlebih dahulu.
sumber
Dyalog APL, 24 byte
4 byte disimpan berkat @ZacharyT
5 byte disimpan berkat @KritixiLithos
Cobalah online!
sumber
1,1,⍴⍵
, kan?{{⍵↑⍨-1 1+⍴⍵}⊃⍪/,/2 2∘↑¨⍵}
pada 261 1+
!1+
berhasil?Oktaf, 41 byte
Cobalah online!
sumber
Python 3 ,
104 101 97 9386 bytew
dihapus dan satu ruang yang tidak diinginkan[a,b]
hanyaa,b
saat menambahkan ke daftarCobalah online!
sumber
w
dan menyimpan 2 byte: repl.it/JBPEm+=[r,w]
[j,0]
kej,0
dan[r,m[0]
ker,m[0]
?for
lekukan loop ke satu tab.Python 3, 118 byte
Pertama kali bermain golf! Bukan yang terbaik, tapi saya cukup bangga jika saya bisa mengatakannya sendiri!
sumber
+=
dan=
dikelilingi oleh spasi, yang dapat dihapus. Selain itu melakukan+=
dua kali berturut-turut dapat disederhanakan menjadi satu pernyataan, misalnyae+=str(d)+'0'
for
lingkaran dalam Anda ke satu barisfor d in c:e+=str(d)+'0'
, tetapi Anda mungkin ingin pergi dengan peta bergabung (str, d)) + '0', in which case it becomes pointless to define
e` sama sekali.z
danr
pada baris yang sama (dengan;
sela di antaranya), menyimpan byte indentasi.R, 65 byte
Terima kasih kepada Jarko Dubbeldam dan Giuseppe untuk komentar yang sangat berharga!
Kode
Input untuk fungsi harus berupa array matriks atau dua dimensi.
Uji
Keluaran
sumber
a=dim(x)*2+1
bukannrow
danncol
akan lebih baik. Anda kemudian dapat melakukany=matrix(0);dim(y)=a
dan2*1:a[1],2*1:a[2]
.y=array(0,a)
akan lebih pendek.2*1:a[1]
karena:
memiliki prioritas lebih tinggi daripada*
Mathematica, 55 byte
sumber
o={0,0}
dapat direduksi menjadio=0{,}
PHP , 98 byte
Input sebagai array 2D, Output sebagai string
Cobalah online!
PHP , 116 byte
Input dan Output sebagai array 2D
Cobalah online!
sumber
Clojure, 91 byte
Ulangi rentang dalam setengah langkah.
sumber
Perl 6 , 33 byte
Cobalah online!
sumber
Python 2 , 64 byte
Cobalah online!
Fungsi
g
menyelingi input antara nol. Fungsi utama mentranspos input saat menerapkang
, kemudian melakukannya lagi. Mungkin ada cara untuk menghindari pengulangan di fungsi utama.sumber
JavaScript (ES6),
7372 byteDiformat dan dikomentari
Memasukkan nol secara horizontal dan vertikal adalah operasi yang sangat mirip. Idenya di sini adalah menggunakan fungsi yang sama g () untuk kedua langkah.
Uji kasus
Tampilkan cuplikan kode
sumber
Arang , 49 byte
Cobalah online!
Input adalah string tunggal yang memisahkan baris dengan titik koma.
sumber
≔E⪪θ;⪫00⪫ι0θFθ⟦⭆ι0ι⟧⭆⊟θ0
tetapi bahkan menghindari StringMap saya masih berpikir ini dapat dilakukan dalam 27 byte.C ++ 17 + Modul, 192 byte
Input sebagai baris string dari cin , Output ke cout
sumber
C # , 146 byte
Data
Int32[,]
m
Matriks yang akan meledakInt32[,]
Matriks yang meledakGolf
Tidak disatukan
Tidak terbaca dibaca
Kode lengkap
Rilis
146 bytes
- Solusi awal.Catatan
sumber
(int[,] m)=>
,m=>
cukup saja jika Anda menyatakanm
adalah 2D int-array int jawaban Anda. Juga, Anda dapat mengubah,x,
ke,x=0,
dan menyingkirkanx=0
inisialisasi for-loop untuk -1 byte. Dan Anda dapat menghapusy++
dari loop dalam dengan mengubah=m[x,y];
ke=m[x,y++];
untuk -1 byte tambahan. Tapi +1 dari saya, dan jika saya membuat port jawaban Anda juga lebih pendek dari jawaban Java saya saat ini. :)Dyalog APL, 24 byte
Setiap perbaikan disambut dan diinginkan!
sumber
Python 2 , 92 byte
Cobalah online!
sumber
Python 3 + Numpy , 87 byte
Cobalah online!
sumber
JavaScript (ES6),
8078 bytesumber
Pyth, 13 byte
Demonstrasi
13 lainnya:
sumber
APL (Dyalog) , 22 byte
Meminta matriks, mengembalikan matriks terlampir.
Cobalah online!
a←⎕
meminta matriks dan menetapkan ke a⍴
dimensi a (baris, kolom)2×
kalikan dengan dua1+
tambahkan satu⍴∘0 1¨
gunakan masing-masing untuk r eshape (secara siklis) angka nol dan satu{
...}/
kurangi dengan menyisipkan fungsi anonim berikut antara dua angka:⍵\a
memperluas * kolom yang sesuai dengan argumen yang tepat⍺⍀a
perluas * baris yang sesuai dengan argumen kiri* 0 memasukkan kolom / baris nol, 1 memasukkan kolom / baris data asli
sumber
Java 8,
183166162129 byteInput dan output sebagai a
int[][]
.-33 byte dengan membuat port jawaban C # @auhmaan .
Penjelasan:
Coba di sini.
sumber
J , 24 byte
Cobalah online!
sumber
05AB1E , 22 byte
Cobalah online!
Sebenarnya menggunakan potongan kode yang sama 2x, jadi saya bisa menyimpannya sebagai string dan menggunakan Eval untuk -10 byte.
sumber