Diberikan daftar angka [ a 1 a 2 ... a n ] , hitung jumlah semua matriks Aᵢ di mana Aᵢ didefinisikan sebagai berikut ( m adalah maksimum semua aᵢ ):
1 2 ⋯ (i-1) i (i+1) ⋯ n
+----------------------------
1 | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
2 | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
. . . . . . . .
. . . . . . . .
aᵢ | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
aᵢ₊₁ | 0 0 ⋯ 0 0 0 ⋯ 0
. . . . . . . .
. . . . . . . .
m | 0 0 ⋯ 0 0 0 ⋯ 0
Contoh
Diberikan input, [2,1,3,1]
kami membangun matriks berikut:
[2 2 2 2] [0 1 1 1] [0 0 3 3] [0 0 0 1] [2 3 6 7]
[2 2 2 2] + [0 0 0 0] + [0 0 3 3] + [0 0 0 0] = [2 2 5 5]
[0 0 0 0] [0 0 0 0] [0 0 3 3] [0 0 0 0] [0 0 3 3]
Aturan dan I / O
- Anda dapat menganggap inputnya tidak kosong
- Anda dapat menganggap semua input tidak negatif (0≤)
- input dapat berupa matriks, daftar, array 1 × n (atau n × 1) dll.
- sama halnya dengan output dapat berupa matriks, daftar daftar, array dll.
- Anda dapat mengambil dan mengembalikan input melalui format I / O standar apa pun
- kiriman Anda mungkin merupakan program atau fungsi lengkap
Uji kasus
[0] -> [] or [[]]
[1] -> [[1]]
[3] -> [[3],[3],[3]]
[2,2] -> [[2,4],[2,4]]
[3,0,0] -> [[3,3,3],[3,3,3],[3,3,3]]
[1,2,3,4,5] -> [[1,3,6,10,15],[0,2,5,9,14],[0,0,3,7,12],[0,0,0,4,9],[0,0,0,0,5]]
[10,1,0,3,7,8] -> [[10,11,11,14,21,29],[10,10,10,13,20,28],[10,10,10,13,20,28],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,10,18],[10,10,10,10,10,10],[10,10,10,10,10,10]]
Jawaban:
Jelly ,
105 byteCobalah online!
Bagaimana itu bekerja
sumber
R , 80 byte
Cobalah online!
Mengambil input dari stdin; mencetak
0x1
matriks untuk input0
, yang dicetak sepertisumber
F
adalah variabel global bawaan yang nilai awalnya adalahFALSE
. Di sini ia dipaksa ke 0 dan digunakan sebagai nilai awal dari jumlah kumulatif. Jawaban ini menunjukkan alasan untuk tidak menggunakanF
danT
kecuali dalam kode yang dirancang khusus untuk tidak pernah benar-benar digunakan!Haskell ,
706651 byteCobalah online!
sumber
JavaScript (ES6),
8879 bytePengembalian
[]
untuk[0]
.Cobalah online!
sumber
APL (Dyalog Unicode) , 8 byte SBCS
Program lengkap. Anjurkan stdin untuk daftar, mencetak matriks ke stdout.
Menggunakan metode Dennis .
Cobalah online!
⎕
stdin⍴⍨¨
r eshape-selfie masing-masing↑
mencampur daftar daftar ke dalam matriks, diisi dengan 0s⍉
mengubah urutan+\
jumlah baris-bijaksana kumulatifTidak
⍉
membuat perbedaan komputasi, sehingga berpotensi ditinggalkan dan\
diubah⍀
menjadi jumlah kolom-bijaksana bukan baris-bijaksana.sumber
Python 2 , 85 byte
Cobalah online!
sumber
Oktaf , 64 byte
Cobalah online!
Penjelasan:
Lagi-lagi: Ekspresi dalam daftar argumen dan eval digunakan dalam satu fungsi :)
Ini diambil
x
sebagai input, dan menciptakan dua matriks identik yang diisi dengan nol, dengan dimensik=a=zeros(length(x),max(x))
. Ini dicapai dengan menambahkan vektor horizontalx
dengan vektor vertikal dengan1:max(x)
, secara implisit memperluas dimensi ke array 2D, kemudian mengalikannya dengan nol.~(x+...)
sayangnya tidak berfungsi, karena itu memaksaa
untuk menjadi array logis di seluruh fungsi.for i=x
adalah loop yang dibuat untuk setiap iterasii=x(1)
, lalui=x(2)
dan seterusnya.a(1:i,k++:end)
adalah bagian dari matriks yang harus diperbarui untuk setiap iterasi.1:i
adalah pepatah vektor baris mana yang harus diperbarui. Jikai=0
, maka ini akan menjadi vektor kosong, jadi tidak ada yang akan diperbarui, selain itu1, 2 ...
.++k:end
menambahk
matriks dengan satu, dan menciptakan rentang dari nilai pertama dari matriks ini (1,2,3...
) dan hingga kolom terakhir daria
matriks.+=i
menambahkan nilai saat ini kea
.end,a
mengakhiri loop dan outputa
.sumber
GolfScript , 39 byte
Cobalah online!
Menggunakan algoritma Dennis .
sumber
Bahasa Wolfram (Mathematica) , 42 byte
Cobalah online!
sumber
Java 10, 142 byte
Cobalah online.
sumber
Ruby , 50 byte
Cobalah online!
sumber
Pari / GP , 60 byte
Cobalah online!
sumber