Stagger, стек, сумма


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 из своего ответа в связанном вопросе
Luis Mendo

Ответы:


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вес

весзнак равно(N-1)×п+1

(Икс,Y)

sИкс,Yзнак равноΣязнак равно0п-1aя(Икс-я×(N-1),Y-я×(N-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-байтовое решение. TIO .





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.