Stagger, stack, sum


15

Lấy cảm hứng từ câu hỏi Stack Overflow này .

Các thách thức

Đầu vào

Một mảng các ma trận vuông chứa các số nguyên không âm.

Đầu ra

Một ma trận vuông được xây dựng từ các ma trận đầu vào như sau.

Đặt N×N là kích thước của mỗi ma trận đầu vào và là số lượng ma trận đầu vào.P

Để rõ ràng, hãy xem xét các ma trận đầu vào ví dụ sau ( N=2 , P=3 ):

 3   5
 4  10

 6   8
12  11

 2   0
 9   1
  1. Bắt đầu với ma trận đầu vào.
  2. Di chuyển ma trận đầu vào thứ hai N 1 bước xuống và N 1 bước sang phải, sao cho mục trên bên trái của nó trùng với mục dưới bên phải của mục trước.
  3. Hãy tưởng tượng ma trận thứ hai, dịch chuyển như thể nó được xếp chồng lên nhau trên ma trận thứ nhất. Tính tổng hai giá trị tại mục trùng hợp. Viết các giá trị khác và điền vào các mục còn lại 0để có ma trận (2N1)×(2N1) . Với đầu vào ví dụ, kết quả cho đến nay là

     3   5   0
     4  16   8
     0  12  11
    
  4. Đối với mỗi ma trận đầu vào còn lại, hãy sắp xếp nó sao cho phía trên bên trái của nó trùng với phía dưới bên phải của ma trận kết quả tích lũy cho đến nay. Trong ví dụ, bao gồm ma trận đầu vào thứ ba cho

     3   5   0   0
     4  16   8   0
     0  12  13   0
     0   0   9   1
    
  5. Đầu ra là ma trận ((N1)P+1)×((N1)P+1) thu được sau khi bao gồm ma trận đầu vào cuối cùng.

Các quy tắc bổ sung và làm rõ

  • NP là các số nguyên dương.
  • Bạn có thể tùy chọn lấy NP làm đầu vào bổ sung.
  • Đầu vào và đầu ra có thể được thực hiện bằng bất kỳ phương tiện hợp lý . Định dạng của họ là linh hoạt như bình thường.
  • Các chương trình hoặc chức năng được cho phép, trong bất kỳ ngôn ngữ lập trình . Sơ hở tiêu chuẩn bị cấm .
  • Mã ngắn nhất trong byte thắng.

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

Trong mỗi trường hợp, ma trận đầu vào được hiển thị đầu tiên, sau đó là đầu ra.

  1. N=2 ,P=3 :

     3   5
     4  10
    
     6   8
    12  11
    
     2   0
     9   1
    
     3   5   0   0
     4  16   8   0
     0  12  13   0
     0   0   9   1
    
  2. N=2 ,P=1 :

     3   5
     4  10
    
     3   5
     4  10
    
  3. N=1 ,P=4 :

     4
    
     7
    
    23
    
     5
    
    39
    
  4. N=3 ,P=2 :

    11  11   8
     6   8  12
    11   0   4
    
     4   1  13
     9  19  11
    13   4   2
    
    11  11   8   0   0
     6   8  12   0   0
    11   0   8   1  13
     0   0   9  19  11
     0   0  13   4   2
    
  5. N= =2 ,P= =4 :

    14  13
    10   0
    
    13  20
    21   3
    
     9  22
     0   8
    
    17   3
    19  16
    
    14  13   0   0   0
    10  13  20   0   0
     0  21  12  22   0
     0   0   0  25   3
     0   0   0  19  16
    

Giải pháp MATL của bạn là bao lâu?
Giuseppe

@Giuseppe Tôi chưa thử nó trong MATL. Đối với các trường hợp thử nghiệm, tôi đã sử dụng mã MATLAB từ câu trả lời của mình trong câu hỏi được liên kết
Luis Mendo

Câu trả lời:


4

Thạch , 15 12 byte

⁹ṖŻ€ƒZƲ⁺+µ@/

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

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

⁹ṖŻ€ƒZƲ⁺+µ@/  Main link. Argument: A (array of matrices)

         µ    Begin a monadic chain.
          @/  Reduce A by the previous chain, with swapped arguments.
                Dyadic chain. Arguments: M, N (matrices)
      Ʋ           Combine the links to the left into a monadic chain with arg. M.
⁹                 Set the return value to N.
 Ṗ                Pop; remove its last row.
     Z            Zip; yield M transposed.
    ƒ             Fold popped N, using the link to the left as folding function and
                  transposed M as initial value.
  Ż€                Prepend a zero to each row of the left argument.
                    The right argument is ignored.
       ⁺        Duplicate the chain created by Ʋ.
        +       Add M to the result.

6

R , 88 81 byte

function(A,N,P,o=0*diag(P*(N-1)+1)){for(i in 1:P)o[x,x]=o[x<-1:N+i-1,x]+A[[i]];o}

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

Mất một listma trận, A, N, và P.

Xây dựng ma trận cần thiết của các số 0 ovà thêm phần tử nội dung của Acác mô đun con thích hợp vào o.


4

JavaScript (ES6), 102 byte

Đưa đầu vào là (n,p,a).

(n,p,a)=>[...Array(--n*p+1)].map((_,y,r)=>r.map((_,x)=>a.map((a,i)=>s+=(a[y-i*n]||0)[x-i*n]|0,s=0)|s))

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

Làm sao?

0w

w= =(n-1)×p+1

(x,y)

Sx,y= =ΣTôi= =0p-1mộtTôi(x-Tôi×(n-1),y-Tôi×(n-1))

trong đó các ô không xác định được thay thế bằng số không.



3

Thạch , 12 byte

Z€Ż€’}¡"Jµ⁺S

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

Z€Ż€’}¡"Jµ⁺S
         µ    Everything before this as a monad.
          ⁺   Do it twice
Z€            Zip €ach of the matrices
        J     1..P
       "      Pair the matrices with their corresponding integer in [1..P] then apply the 
              following dyad:
  Ż€            Prepend 0 to each of the rows
      ¡         Repeat this:
    ’}          (right argument - 1) number of times
              Doing everything before µ twice adds the appropriate number of rows and
              columns to each matrix. Finally:
           S  Sum the matrices.

12 byte

J’0ẋ;Ɱ"Z€µ⁺S

Nếu số 0 bổ sung được cho phép ZŻ€‘ɼ¡)⁺Slà một giải pháp 9 byte thú vị. TIO .





1

Than , 52 byte

≦⊖θE⊕×θηE⊕×θηΣEEη×θξ∧¬∨∨‹ιν›ι⁺θν∨‹λν›λ⁺θν§§§ζξ⁻ιν⁻λν

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã và bao gồm hai byte để định dạng có thể sử dụng được. Tôi đã bắt đầu với một phiên bản đệm tất cả các mảng và sau đó tóm tắt chúng nhưng tôi đã có thể chơi golf phiên bản này để ngắn hơn thay thế. Giải trình:

≦⊖θ

Giảm giá trị đầu vào N.

E⊕×θηE⊕×θη

Tính kích thước của kết quả (N-1)P+1 và ánh xạ qua phạm vi ngầm hai lần, do đó tạo ra một ma trận kết quả được in rõ ràng.

ΣEEη×θξ

Ánh xạ trên phạm vi ngầm trên giá trị đầu vào P và nhân từng phần tử với N-1. Sau đó, ánh xạ trên phạm vi kết quả và tổng hợp kết quả cuối cùng.

∧¬∨∨‹ιν›ι⁺θν∨‹λν›λ⁺θν

Kiểm tra xem không có chỉ số nào nằm ngoài phạm vi.

§§§ζξ⁻ιν⁻λν

Bù đắp vào đầu vào ban đầu để lấy giá trị mong muốn.

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.