Tantangan:
Diberikan matriks input persegi A , pad matriks dengan satu baris dan satu kolom di keempat sisi.
- Nilai setiap elemen di baris atas dan bawah harus merupakan jumlah dari elemen di setiap kolom yang sesuai.
- Nilai setiap elemen di kolom kiri dan kanan harus merupakan jumlah dari elemen di setiap baris yang sesuai.
- Nilai elemen di kiri atas, dan sudut kanan bawah harus menjadi jumlah elemen di diagonal
- Nilai elemen di kanan atas, dan sudut kiri bawah harus menjadi jumlah elemen di anti-diagonal.
Contoh:
A =
1 5 3
3 2 4
2 5 5
Output:
8 6 12 12 7
9 1 5 3 9
9 3 2 4 9
12 2 5 5 12
7 6 12 12 8
Penjelasan:
Elemen kiri atas dan kanan bawah adalah jumlah dari diagonal 1 + 2 + 5 = 8 . Elemen kanan atas dan kiri bawah adalah jumlah dari anti-diagonal 2 + 2 + 3 = 7 .
Baris atas dan bawah (kecuali sudut) adalah jumlah dari masing-masing kolom dalam A : 1 + 3 + 2 = 6 , 5 + 2 + 5 = 12 dan 3 + 4 + 5 = 12 . Demikian pula, kolom kiri dan kanan (kecuali sudut) adalah jumlah dari setiap baris A : 1 + 5 + 3 = 9 , 3 + 2 + 4 = 9 dan 2 + 5 + 5 = 12 .
Memasukkan:
- Matriks kuadrat tidak kosong, dengan bilangan bulat non-negatif.
- Format opsional
Keluaran:
- Matriks tersebut diisi seperti dijelaskan di atas
- Format opsional, tetapi harus sama dengan format input
Kasus uji:
Gunakan kiriman dalam tantangan ini jika Anda ingin mengonversi format input ke format yang lebih cocok (misalnya [[1, 5],[0, 2]]
).
0
----------------
0 0 0
0 0 0
0 0 0
1 5
0 2
----------------
3 1 7 5
6 1 5 6
2 0 2 2
5 1 7 3
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
----------------
65 65 65 65 65 65 65
65 17 24 1 8 15 65
65 23 5 7 14 16 65
65 4 6 13 20 22 65
65 10 12 19 21 3 65
65 11 18 25 2 9 65
65 65 65 65 65 65 65
15 1 2 12
4 10 9 7
8 6 5 11
3 13 14 0
----------------
30 30 30 30 30 30
30 15 1 2 12 30
30 4 10 9 7 30
30 8 6 5 11 30
30 3 13 14 0 30
30 30 30 30 30 30
Ini adalah kode-golf , sehingga solusi terpendek dalam setiap bahasa menang. Penjelasan sangat dianjurkan.
sumber
Jawaban:
Oktaf , 64 byte
Terima kasih kepada Tom Carpenter karena telah menghemat 4 byte, dan mengoreksi kesalahan yang saya miliki dalam kode asli!
Cobalah online!
Penjelasan:
Catatan, saya menulis ini lama setelah saya memposting tantangan.
sumber
Jelly , 27 byte
Cobalah online!
sumber
MATL ,
2726 byteCobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
APL (Dyalog) , 37 byte
Cobalah online!
1 1∘⍉
diagonal (sedikit runtuh kedua sumbu menjadi satu)d←
simpan fungsi itu sebagai d dan terapkan pada argumen+⌿
tambahkan jumlah kolomd∘⌽,
tambahkan d diterapkan pada argumen terbalik(
...)⍪
susun yang berikut di atas:+/,⊢,+/
jumlah baris, argumen yang tidak dimodifikasi, jumlah baris(
...)⍪
susun yang berikut di atas:d,+⌿,d∘⌽
diterapkan pada argumen, jumlah kolom, d diterapkan pada argumen terbaliksumber
Jelly , 26 byte
Cobalah online!
Tampak sangat berbeda dari solusi Erik .
Saya akhirnya berhasil memahami cara
¦
kerjanya (dengan men-debug kode Jelly, lol). Sayang sekali itu membutuhkan€
untuk bekerja denganÇ
dalam kasus saya.Penjelasan
Kode ini menggunakan tiga tautan. Link helper pertama memuat vektor dengan penjumlahannya di kedua ujungnya, link helper kedua memperbaiki dua sudut matriks dan tautan utama menyebutnya dengan tepat.
sumber
Python 3 , 155 byte
Ini adalah saran dari @ LeakyNun, yang menghemat 54 byte . Saya kemudian bermain golf sendiri sedikit.
Cobalah online!
Solusi awal - Python 3 , 216 byte
Cobalah online!
sumber
Python 2 ,
268250184174 byte10 terima kasih kepada Stewie Griffin
Cobalah online!
Beberapa penjelasan . Masukan diunggah dalam bentuk matriks. Pertama kode menghitung jumlah setiap kolom dan setiap baris menggunakan numpy.sum. Kemudian menghitung jumlah diagonal dengan numpy.trace. Setelah ini ia memperoleh diagonal lainnya dengan membuat flip kiri-kanan pada matriks. Akhirnya, ia menggunakan numpy.vstack dan numpy.hstack untuk merekatkan potongan.
sumber
R, 129 byte
Fungsi anonim yang mengambil matriks persegi sebagai input. Saya akan memposting penjelasan jika ada minat.
sumber
PHP , 211 byte
Cobalah online!
Diperluas
sumber
Python 3 , 125 byte
Cobalah online!
Sedikit tidak berbulu:
Ini mengambil input yang diformat sebagai array numpy, kemudian menggunakan alat
np.c_
dannp.r_
pengindeksan untuk membangun array baru sekaligus.np.trace
dannp.sum
digunakan untuk menghitung jumlah sepanjang diagonal dan di tempat lain, masing-masing.T
digunakan untuk mengambil transpos sebelum dan sesudah menggabungkan jumlah karena lebih pendek daripada membuat semua array 2-dimensi dan menggunakannp.r_
.m[::-1]
menyimpan byte jika dibandingkan denganrot90(m)
ataufliplr(m)
untuk menemukan jejak untuk diagonal kedua.sumber
JavaScript (ES6), 170 byte
Input dan output adalah array angka 2D.
Dijelaskan
Cuplikan Tes
Input / output telah diformat dengan baris dan tab baru.
sumber
LOGO , 198 byte
Fungsi
f
mengambil dalam matriks sebagai daftar 2D, kemudian mengeluarkan matriks yang dihasilkan.g
adalah fungsi pembantu.sumber