Stagger, yığın, toplam


15

Bu Yığın Taşması sorusundan ilham alındı .

Meydan okuma

Giriş

Negatif olmayan tamsayılar içeren bir kare matris dizisi.

Çıktı

Girdi matrislerinden aşağıdaki gibi oluşturulan bir kare matris.

Let N×N , her giriş matrisin boyutu ve olmak P giriş matrisleri sayısı.

Açıklık için aşağıdaki örnek giriş matrislerini göz önünde bulundurun ( N=2 , P=3 ):

 3   5
 4  10

 6   8
12  11

 2   0
 9   1
  1. İlk giriş matrisi ile başlayın.
  2. İkinci giriş matrisini N −1 aşağı ve N −1 sağa kaydırın , böylece sol üst girişi bir öncekinin sağ alt girişiyle çakışır.
  3. İkinci, kaydırılmış matrisi sanki ilkinin üzerine yığılmış gibi düşünün. Çakışan girişteki iki değeri toplayın. Diğer değerleri yazın ve ( 2 N - 1 ) × ( 2 N - 1 ) matrisi 0elde etmek için kalan girişleri doldurun . Örnek girdi ile şimdiye kadar sonuç(2N1)×(2N1)

     3   5   0
     4  16   8
     0  12  11
    
  4. Kalan her giriş matrisi için, sol üst köşesi şimdiye kadar biriken sonuç matrisinin sağ alt köşesine denk gelecek şekilde kademelendirin. Örnekte, üçüncü girdi matrisi dahil

     3   5   0   0
     4  16   8   0
     0  12  13   0
     0   0   9   1
    
  5. Çıkış, son giriş matrisini dahil ettikten sonra elde edilen ((N1)P+1)×((N1)P+1) matrisidir.

Ek kurallar ve açıklamalar

Test senaryoları:

Her durumda, önce giriş matrisleri, daha sonra çıkış gösterilir.

  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
    

MATL çözümünüz bunun için ne kadar sürüyor?
Giuseppe

@Giuseppe MATL'de denemedim. Test
senaryoları

Yanıtlar:


4

Jöle , 15 12 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

⁹ṖŻ€ƒ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 bayt

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}

Çevrimiçi deneyin!

Bir Alır listMatrislerin, A,N , ve P.

Zorunlu sıfır matrisini oluşturur ve oiçeriğini Auygun alt matrislere eleman olarak ekler o.


4

JavaScript (ES6), 102 bayt

Girişi alır (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))

Çevrimiçi deneyin!

Nasıl?

0w

w=(n1)×p+1

(x,y)

sx,y=i=0p1ai(xi×(n1),yi×(n1))

burada tanımsız hücreler sıfırlarla değiştirilir.



3

Jöle , 12 bayt

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

Çevrimiçi deneyin!

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 bayt

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

Ekstra sıfırlara izin verilmişse ZŻ€‘ɼ¡)⁺S, serin bir 9 bayt çözeltisidir. TIO .





1

Kömür , 52 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur ve biraz kullanılabilir biçimlendirme için iki bayt içerir. Tüm dizileri dolduran bir versiyonla başladım ve sonra onları topladım, ancak bunun yerine daha kısa olabilmek için golf yapabildim. Açıklama:

≦⊖θ

Giriş değerini azaltın N-.

E⊕×θηE⊕×θη

Sonucun boyutunu hesaplama (N--1)P+1 ve dolaylı olarak yazdırılan bir sonuç matrisi üreterek dolaylı aralık üzerinde iki kez eşleyin.

ΣEEη×θξ

Girdi değerinin üzerindeki örtük aralıkta eşleme P ve her öğeyi N--1. Ardından, elde edilen aralığın haritasını çıkarın ve nihai sonucu toplayın.

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

Endekslerin hiçbirinin aralık dışında olmadığını kontrol edin.

§§§ζξ⁻ιν⁻λν

İstenen değeri getirmek için orijinal girişe kaydırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.