Przesunięcie, stos, suma


15

Zainspirowany przez tym pytaniem Przepełnienie stosu .

Wyzwanie

Wejście

Tablica kwadratowych macierzy zawierających nieujemne liczby całkowite.

Wynik

Matryca kwadratowa zbudowana z macierzy wejściowych w następujący sposób.

Niech N.×N. będzie rozmiarem każdej macierzy wejściowej, a P. liczbą macierzy wejściowych.

Dla jasności rozważmy następujące przykładowe macierze wejściowe ( N.=2) , P.=3) ):

 3   5
 4  10

 6   8
12  11

 2   0
 9   1
  1. Zacznij od pierwszej matrycy wejściowej.
  2. Przesuń drugą macierz wejściową N- 1 o krok w dół i N -1 kroki w prawo, tak aby jej górny lewy wpis pokrywa się z prawym dolnym wpisem poprzedniego.
  3. Wyobraź sobie drugą, przesuniętą matrycę, jakby była ułożona na górze pierwszej. Zsumuj dwie wartości przy wpisie zbiegu. Wpisz pozostałe wartości i wypełnij pozostałe wpisy, 0aby uzyskać macierz (2)N.-1)×(2)N.-1) . Z przykładowego wejścia wynik jest jak dotąd

     3   5   0
     4  16   8
     0  12  11
    
  4. Dla każdej pozostałej macierzy wejściowej ustaw ją tak, aby jej górna lewa część pokrywała się z dolną prawą zakumulowaną macierzą wyników do tej pory. W tym przykładzie, w tym trzecia macierz wejściowa daje

     3   5   0   0
     4  16   8   0
     0  12  13   0
     0   0   9   1
    
  5. Wyjście jest macierzą ((N.-1)P.+1)×((N.-1)P.+1) uzyskaną po uwzględnieniu ostatniej macierzy wejściowej.

Dodatkowe zasady i wyjaśnienia

Przypadki testowe:

W każdym przypadku najpierw wyświetlane są macierze wejściowe, a następnie dane wyjściowe.

  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
    

Jak długie jest twoje rozwiązanie MATL?
Giuseppe,

@Giuseppe Nie próbowałem tego w MATL. Dla przypadków testowych użyłem kodu MATLAB z mojej odpowiedzi w połączonym pytaniu
Luis Mendo

Odpowiedzi:


4

Galaretka , 15 12 bajtów

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

Wypróbuj online!

Jak to działa

⁹ṖŻ€ƒ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 bajtów

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}

Wypróbuj online!

Trwa listmatryc A, Ni P.

Tworzy wymaganą macierz zer oi dodaje elementarnie zawartość Aodpowiednich podmacierzy w o.


4

JavaScript (ES6), 102 bajty

Pobiera dane wejściowe jako (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))

Wypróbuj online!

W jaki sposób?

0w

w=(n-1)×p+1

(x,y)

sx,y=ja=0p-1zaja(x-ja×(n-1),y-ja×(n-1))

gdzie niezdefiniowane komórki są zastępowane zerami.



3

Galaretka , 12 bajtów

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

Wypróbuj online!

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 bajtów

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

Jeśli dozwolone ZŻ€‘ɼ¡)⁺Ssą dodatkowe zera, to fajne 9-bajtowe rozwiązanie. TIO .





1

Węgiel , 52 bajty

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

Wypróbuj online! Link jest do pełnej wersji kodu i zawiera dwa bajty dla nieco użytecznego formatowania. Zacząłem od wersji, która wypełniała wszystkie tablice, a następnie je podsumowałam, ale zamiast tego byłam w stanie zagrać w golfa. Wyjaśnienie:

≦⊖θ

Zmniejsz wartość wejściową N..

E⊕×θηE⊕×θη

Oblicz rozmiar wyniku (N.-1)P.+1 i odwzorować dwukrotnie na niejawny zakres, tworząc w ten sposób macierz wyników, która jest drukowana w sposób niejawny.

ΣEEη×θξ

Odwzoruj na niejawny zakres powyżej wartości wejściowej P. i pomnóż każdy element przez N.-1. Następnie zmapuj wynikowy zakres i zsumuj wynik końcowy.

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

Sprawdź, czy żaden z indeksów nie jest poza zakresem.

§§§ζξ⁻ιν⁻λν

Przesunięcie do oryginalnego wejścia, aby pobrać żądaną wartość.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.