스 태거, 스택, 합계


15

이 스택 오버플로 질문에서 영감을 얻었습니다 .

도전

입력

음이 아닌 정수를 포함하는 제곱 행렬의 배열입니다.

산출

다음과 같이 입력 행렬로 구성된 정사각 행렬입니다.

하자 각 입력 행렬의 크기 및 수 입력 행렬의 수.×

명확성을 위해 다음 예제 입력 행렬 ( =2 , = )을 고려하십시오.

 3   5
 4  10

 6   8
12  11

 2   0
 9   1
  1. 첫 번째 입력 행렬로 시작하십시오.
  2. 왼쪽 위 항목이 이전 항목의 오른쪽 아래 항목과 일치하도록 두 번째 입력 행렬 N -1 단계 아래로 N -1 단계 오른쪽으로 이동합니다.
  3. 첫 번째 위에 쌓인 것처럼 두 번째로 쉬프트 된 행렬을 상상해보십시오. 일치 항목에서 두 값을 합산하십시오. 다른 값을 쓰고 나머지 항목을 채워 ( 2 N - 1 ) × ( 2 N - 1 ) 행렬 0을 얻습니다 . 예제 입력으로 지금까지의 결과는(21)×(21)

     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. 출력은 마지막 입력 행렬을 포함시킨 후 얻은 ((1)+1)×((1)+1) 행렬입니다.

추가 규칙 및 설명

  • 는 양의 정수입니다.
  • 선택적으로 를 추가 입력으로 사용할 수 있습니다 .
  • 입력 및 출력은 합리적인 방법 으로 수행 할 수 있습니다 . 그들의 형식은 평소처럼 유연합니다.
  • 모든 프로그래밍 언어의 프로그램 또는 기능이 허용 됩니다 . 표준 허점은 금지되어 있습니다.
  • 바이트 단위의 짧은 코드가 이깁니다.

테스트 사례 :

각각의 경우, 입력 매트릭스가 먼저 표시된 다음 출력이 표시됩니다.

  1. =2 ,= :

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

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

     4
    
     7
    
    23
    
     5
    
    39
    
  4. = ,=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. =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

@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

자바 스크립트 (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))

온라인으로 사용해보십시오!

어떻게?

JS에서 기본 상수 ( 이 경우 0 로 채워진 재조정 행렬 은 그리 쉽고 빠르지 않으므로 올바른 너비 가진 정사각 행렬을 작성하십시오 .

=(1)×+1

(엑스,와이) 각 셀에 대해 다음 을 계산합니다.

에스엑스,와이=나는=01나는(엑스나는×(1),와이나는×(1))

정의되지 않은 셀은 0으로 대체됩니다.



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

여분의 0이 허용 ZŻ€‘ɼ¡)⁺S되면 멋진 9 바이트 솔루션입니다. 티오 .





1

, 52 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 코드 버전으로, 약간 사용 가능한 형식을 위해 2 바이트를 포함합니다. 모든 배열을 채우고 요약 한 버전으로 시작했지만이 버전을 더 짧게 골프화 할 수있었습니다. 설명:

≦⊖θ

E⊕×θηE⊕×θη

(1)+1 암시 적 범위에 걸쳐 두 번 매핑하여 결과 매트릭스를 생성합니다.

ΣEEη×θξ

입력 값에 대한 암시 적 범위에 대한 맵 각 요소에 1. 그런 다음 결과 범위를 매핑하고 최종 결과를 합산하십시오.

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

인덱스 중 어느 것도 범위를 벗어 났는지 확인하십시오.

§§§ζξ⁻ιν⁻λν

원하는 값을 가져 오기 위해 원래 입력으로 오프셋합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.