Похитуватися, стек, сума


15

Натхненний цим запитом про переповнення стека .

Змагання

Вхідні дані

Масив квадратних матриць, що містять невід’ємні цілі числа.

Вихідні дані

Квадратна матриця, побудована з вхідних матриць наступним чином.

Нехай N×N - розмір кожної вхідної матриці, а П - кількість вхідних матриць.

Для наочності розглянемо наступні приклади вхідних матриць ( N=2 , П=3 ):

 3   5
 4  10

 6   8
12  11

 2   0
 9   1
  1. Почніть з першої вхідної матриці.
  2. Зсуньте другу вхідну матрицю N −1 сходинок вниз, а N −1 кроки вправо, щоб її верхній лівий запис збігався з правою нижньою частиною попереднього.
  3. Уявіть другу, зміщену матрицю так, ніби вона складена поверх першої. Підсумовуйте два значення при збігу даних, що збігаються. Напишіть інші значення та заповніть інші записи, 0щоб отримати матрицю (2N-1)×(2N-1) . З прикладу введення, результат поки що є

     3   5   0
     4  16   8
     0  12  11
    
  4. Для кожної залишкової вхідної матриці розмістіть її так, щоб її верхній лівий кут збігався з правою нижньою частиною накопиченої матриці результатів до цього часу. У прикладі, що включає третю вхідну матрицю, дає

     3   5   0   0
     4  16   8   0
     0  12  13   0
     0   0   9   1
    
  5. Вихід - матриця ((N-1)П+1)×((N-1)П+1) отримана після включення останньої вхідної матриці.

Додаткові правила та роз'яснення

Тестові приклади:

У кожному випадку спочатку відображаються вхідні матриці, а потім вихідні.

  1. N=2 ,П=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 ,П=1 :

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

     4
    
     7
    
    23
    
     5
    
    39
    
  4. N=3 ,П=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 ,П=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 для цього?
Джузеппе

@Giuseppe Я не пробував цього в MATL. Для тестових випадків я використав код MATLAB зі своєї відповіді на пов'язане запитання
Луїс Мендо

Відповіді:


4

Желе , 15 12 байт

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

Спробуйте в Інтернеті!

Як це працює

⁹ṖŻ€ƒ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 байт

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}

Спробуйте в Інтернеті!

Приймає listматриці, A, N, і P.

Побудує необхідну матрицю нулів oі додає елементарно вміст Aу відповідні підматриці в o.


4

JavaScript (ES6), 102 байти

Вводиться як " (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))

Спробуйте в Інтернеті!

Як?

0ш відразу:

ш=(н-1)×p+1

(х,у) обчислюємо:

сх,у=i=0p-1аi(х-i×(н-1),у-i×(н-1))

де невизначені клітини замінюються нулями.



3

Желе , 12 байт

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

Спробуйте в Інтернеті!

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 байт

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

Якщо додаткові нулі були дозволені ZŻ€‘ɼ¡)⁺S- це прохолодний 9-байтний розчин. ТІО .





1

Вугілля деревне , 52 байти

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду і включає два байти для дещо зручного форматування. Я почав з версії, яка заповнила всі масиви, а потім підсумувала їх, але мені вдалося замість цього, щоб ця версія була коротшою. Пояснення:

≦⊖θ

Зменшення вхідного значення N.

E⊕×θηE⊕×θη

Обчисліть розмір результату (N-1)П+1 і картографувати два рази неявний діапазон, створюючи таким чином матрицю результатів, яка нечітко друкується

ΣEEη×θξ

Відображення карти по непрямому діапазону над вхідним значенням П і помножте кожен елемент на N-1. Потім, картографуйте отриманий діапазон і підсумовуйте кінцевий результат.

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

Переконайтеся, що жоден з індексів не знаходиться в діапазоні.

§§§ζξ⁻ιν⁻λν

Зсув у вихідний вхід для отримання потрібного значення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.