Tổng các ma trận nhân rộng


11

Cho một danh sách các số [ a 1 a 2 ... a n ] , tính tổng của tất cả các ma trận Aᵢ trong đó Aᵢ được định nghĩa như sau ( m là cực đại của tất cả 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

Thí dụ

Cho đầu vào, [2,1,3,1]chúng tôi xây dựng ma trận sau:

[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]

Quy tắc và I / O

  • bạn có thể cho rằng đầu vào không trống
  • bạn có thể cho rằng tất cả các đầu vào là không âm (0≤)
  • đầu vào có thể là ma trận 1 × n (hoặc n × 1), danh sách, mảng, v.v.
  • tương tự đầu ra có thể là một ma trận, danh sách các danh sách, mảng, v.v.
  • bạn có thể lấy và trả lại đầu vào thông qua bất kỳ định dạng I / O mặc định nào
  • trình của bạn có thể là một chương trình hoặc chức năng đầy đủ

Các trường hợp thử nghiệm

[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]]

Tôi đoán có một sự khác biệt về phông chữ hoặc một cái gì đó. Tôi thấy bạn quay lại chỉnh sửa của tôi. Đây là giao diện hiện tại đối với tôi imgur.com/a06RH9r Đây là Chrome trên Windows 10. Các hình elip dọc không được hiển thị trong không gian đơn vì một số lý do và không căn chỉnh với các cột. Đó là lý do tại sao tôi thay đổi nó. Nhưng tôi đoán nó phải trông khác nhau trong các môi trường khác nhau.
đệ quy

1
Chắc chắn là một vấn đề phông chữ. Cả hai phiên bản đều được điều chỉnh sai trên màn hình của tôi.
Dennis

Chúng tôi có thể trả lại kết quả chuyển đổi?
Adám


1
@ Adám: Tôi sẽ nói không với điều đó, tuy nhiên, vui lòng đưa giải pháp vào bài đăng của bạn làm như vậy.
ბიმო

Câu trả lời:


9

Thạch , 10 5 byte

ẋ"z0Ä

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

ẋ"z0Ä  Main link. Argument: A (array)


       e.g. [2, 1, 3, 1]

ẋ"     Repeat each n in A n times.

       e.g. [[2, 2   ]
             [1      ]
             [3, 3, 3]
             [1      ]]

  z0   Zipfill 0; read the result by columns, filling missing elements with 0's.

        e.g. [[2, 1, 3, 1]
              [2, 0, 3, 0]
              [0, 0, 3, 0]]

    Ä  Take the cumulative sum of each row vector.

       e.g. [[2, 3, 6, 7]
             [2, 2, 5, 5]
             [0, 0, 3, 3]]

4

R , 80 byte

n=sum((a=scan())|1);for(i in 1:n)F=F+`[<-`(matrix(0,max(a),n),0:a[i],i:n,a[i]);F

Hãy thử trực tuyến!

Lấy đầu vào từ stdin; in một 0x1ma trận cho đầu vào 0, in ra như

	[,1]


3
Đối với những người thắc mắc, Flà một biến toàn cầu tích hợp có giá trị ban đầu là FALSE. Ở đây, nó bị ép về 0 và được sử dụng làm giá trị ban đầu của tổng tích lũy. Câu trả lời này cho thấy lý do không sử dụng FTngoại trừ trong mã được thiết kế đặc biệt không bao giờ được sử dụng thực sự!
ngm



3

APL (Dyalog Unicode) , 8 byte SBCS

Chương trình đầy đủ. Nhắc stdin cho danh sách, in ma trận vào thiết bị xuất chuẩn.

Sử dụng phương pháp của Dennis .

+\⍉↑⍴⍨¨⎕

Hãy thử trực tuyến!

 stdin

⍴⍨¨r eshape-selfie của mỗi

 trộn danh sách các danh sách thành ma trận, điền 0

 hoán vị

+\ tích lũy hàng khôn ngoan

Việc này không tạo ra bất kỳ sự khác biệt nào về mặt tính toán, do đó, nó có thể bị bỏ qua và \thay đổi thành tổng hợp theo cột thay vì theo hàng.



2

Octave , 64 byte

@(x,k=a=0*(x+(1:max(x))'))eval"for i=x;a(1:i,++k:end)+=i;end,a";

Hãy thử trực tuyến!

Giải trình:

Một lần nữa: Biểu thức trong danh sách đối số và eval được sử dụng trong một hàm :)

Điều này lấy xlàm đầu vào và tạo hai ma trận giống hệt nhau chứa đầy các số không, với các kích thước k=a=zeros(length(x),max(x)). Điều này đạt được bằng cách thêm vectơ ngang xvới vectơ dọc 1:max(x), ngầm mở rộng kích thước thành mảng 2D, sau đó nhân số này với số không. ~(x+...)Thật không may, vì điều đó buộc aphải là một mảng logic trong suốt phần còn lại của hàm.

for i=xlà một vòng lặp mà mỗi lần lặp lại tạo ra i=x(1), sau đó i=x(2)và cứ thế. a(1:i,k++:end)là một phần của ma trận nên được cập nhật cho mỗi lần lặp. 1:ilà một vector cho biết những hàng nào sẽ được cập nhật. Nếu i=0, thì đây sẽ là một vector trống, do đó, sẽ không có gì được cập nhật, nếu không thì nó 1, 2 .... ++k:endtăng kma trận lên một và tạo một phạm vi từ giá trị đầu tiên của ma trận này ( 1,2,3...) và cho đến cột cuối cùng của ama trận. +=ithêm giá trị hiện tại vào a. end,akết thúc vòng lặp và đầu ra a.




1

Java 10, 142 byte

a->{int l=a.length,i=0,j,s,m=0;for(int q:a)m=q>m?q:m;int[][]r=new int[m][l];for(;i<m;i++)for(j=s=0;j<l;j++)r[i][j]=s+=i<a[j]?a[j]:0;return r;}

Hãy thử trực tuyến.

a->{               // Method with integer-array parameter and integer-matrix return-type
  int l=a.length,  //  Length of the input-array
      i,j,         //  Index integers
      s,           //  Sum integer
  m=0;for(int q:a)m=q>m?q:m;
                   //  Determine the maximum of the input-array
  int[][]r=new int[m][l];
                   //  Result-matrix of size `m` by `l`
  for(;i<m;i++)    //  Loop `i` over the rows
    for(j=s=0;     //   Reset the sum to 0
        j<l;j++)   //   Inner loop `j` over the columns
      r[i][j]=s+=  //    Add the following to the sum `s`, add set it as current cell:
        i<a[j]?    //     If the row-index is smaller than the `j`'th value in the input:
         a[j]      //      Add the current item to the sum
        :          //     Else:
         0;        //      Leave the sum the same by adding 0
  return r;}       //  Return the result-matrix


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.