태그 보관물: matrix

matrix

이웃 수가 가장 많은 숫자 찾기 아래, 오른쪽 및 왼쪽의 숫자이지만 그 자체는

도전

주어진 숫자의 격자 (10 <= N <= 99) 인접한 4 개의 숫자의 합이 가장 큰 리턴 숫자. 그것은 숫자의 위, 아래, 오른쪽 및 왼쪽의 숫자이지만 그 자체는 아닙니다.

  1. 숫자 자체는 계산되지 않으며 네 이웃 만 계산됩니다.
  2. 모서리의 숫자는 누락 된 숫자가 0 인 것처럼 처리 해야 합니다.
  3. 나는 동점을 피하기 위해 테스트를 설계 할 것입니다.
  4. 숫자는 반복되지 않습니다.
  5. 이것은 입니다.

주어진

56 98 32 96
12 64 45 31
94 18 83 71

반환

18

실제 테스트

주어진

98 95 67 66 57 16 40 94 84 37
87 14 19 34 83 99 97 78 50 36
18 44 29 47 21 86 24 15 91 61
60 41 51 26 10 58 11 62 55 71
42 85 56 12 46 81 93 65 49 77
89 13 74 39 54 76 92 33 82 90
96 88 70 79 80 28 25 20 75 68
38 63 17 72 53 48 73 30 45 69
64 35 32 31 23 43 22 52 27 59

반환

13

주어진

82 43 79 81 94 36 17 64 58
24 52 13 87 70 18 28 61 69
16 99 75 21 50 44 89 90 51
49 80 63 31 54 65 41 55 38
67 91 76 78 23 86 83 14 73
46 68 62 77 34 48 20 74 10
33 35 26 97 59 66 25 37 32
12 92 84 27 85 56 22 40 45
96 15 98 53 39 30 88 71 29
60 42 11 57 95 19 93 72 47

반환

15


답변

MATL , 20 15 13 12 바이트

t1Y6Z+tuX>=)

Emigna 덕분에 5 바이트, Giuseppe 덕분에 2 바이트, Luis Mendo 덕분에 5 바이트를 절약했습니다.
온라인으로 사용해보십시오!

설명

t1Y6Z+tuX>=)
t                  Duplicate the (implicit) input.
 1Y6               Push the array [0 1 0; 1 0 1; 0 1 0].
    Z+             Convolve with the input.
       uX>         Get the maximum unique element...
      t   =        ... and compare elementwise.
           )       Index into the input.

답변

APL (Dyalog Unicode) , 31 27 26 24 23 바이트 SBCS

Cows ck 덕분에 -2. ngn 덕분에 -1입니다.

익명의 암묵적 접두사 기능. 행렬을 인수로 사용합니다. 많은 시스템에서 기본값 인 ⎕IO( i ndex O rigin) 이라고 가정 0합니다.

{⊃⍒,(+/--/)⊢∘,⌺3 3⊢⍵}⊃,

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

, 입력을 라벨링 (평평하게)

{}⊃ 다음 기능의 결과에 따라 요소에서 요소를 선택하십시오.

⊢⍵ 인수를 산출 (분리형 3 3에서 )

 … ⌺3 3 각 3×3 이웃에 다음 기능을 적용하십시오.

  ⊢∘, 뾰족한 (평평한) 이웃을 위해 가장자리 정보를 무시하십시오

  () 다음의 암묵적 기능을 그들에게 적용하십시오

   -/ 교호 합 (lit. right-associative minus reduction)

   +/- 합계에서 그것을 빼십시오 (이것은 다른 모든 요소의 합계를 제공합니다)

, 라벨 (평평하게) (이웃은 합산)

 정렬 할 인덱스를 생성합니다

 첫 번째를 선택하십시오 (즉, 가장 높은 합계의 색인)


답변

젤리 , 22 바이트

;€0ZṙØ+SṖ
,ZÇ€Z+$/ŒMœị

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

MATL 및 Dyalog와 같은 컨볼 루션 내장 기능이 없음 언어를 잊어 버리면 컨볼 루션 내장 기능 (@dylnan 덕분에)이 아프지 만 부분적으로 ŒM및 덕분에 아무런 도움이되지 않습니다 œị. 먼저, 한 방향으로 이웃을 계산하는 도우미 함수는 우연히 입력을 바꿉니다.

;€0Z         Append a zero to each row, then transpose.
    ṙØ+S     Rotate by +1 and −1 (Ø+ = [1,-1]) and sum these.
        Ṗ    Pop the last row.

시각적으로 계산은 다음과 같습니다.

1 2 3   ;€0   1 2 3 0   Z   1 4 7   ṙØ+     2 5 8   0 0 0     S   2  5  8   Ṗ   2  5  8
4 5 6  ————→  4 5 6 0  ——→  2 5 8  ————→  [ 3 6 9 , 1 4 7 ]  ——→  4 10 16  ——→  4 10 16
7 8 9         7 8 9 0       3 6 9           0 0 0   2 5 8         2  5  8       2  5  8
                            0 0 0           1 4 7   3 6 9         4 10 16

해석 :이 결과의 셀 (x, y)은 셀 (y, x)의 수평 이웃의 합입니다. (예를 들어, 여기에서 f (A) [2,3] = 16 = 7 + 9 = A [3,1] + A [3,3] 입니다.)

그런 다음 주요 기능 :

,ZÇ€            Pair the input with its transpose and apply helper to both.
    Z+$/        Fold by Z+, i.e., turn [X,Y] into transpose(X)+Y.
                Now we've summed the horizontal and vertical neighbors for each cell.
        ŒM      Find the 2D index of the maximal value.
          œị    2D-index (into the original input).

답변

젤리 , 18 바이트

5BæcµḊṖ)
ZÇZ+ÇŒMœị

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

도우미 함수는 각 행에서 각 요소의 이웃을 찾습니다. 주요 함수는 이것을 행에 수행하고 열은 최대 이웃 합계를 가진 요소를 찾습니다.

5BæcµḊṖ)
5B           bin(5): 1,0,1
  æc         Convolve with [[1,2,9],[other rows]] (for example): [[1,2,10,2,9],...]
    µ        New chain.
       )     Apply this to each element:
     Ḋ       Remove the first element.
      Ṗ      Remove the last element.
             Gives [[2,10,2],...]

ZÇZ+ÇŒMœị
Z            Zip the matrix
 Ç           Apply helper function
  Z          Zip again. Yields the sum of the vertical neighbors of each element.
   +         Add:
    Ç        The sum of each element's horizontal neighbors.
     ŒM      Find the multidimensional index of the maximal element.
       œị    Index back into the original matrix.

답변

Wolfram Language (Mathematica) , 58 바이트

Im@Last[Union@@ListConvolve[{a={0,1,0},{1,I,1},a},#,2,0]]&

(0101i1010)

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


답변

파이썬 2 , 127 바이트

def f(a):n=len(a[0]);b=sum(a,[])+[0]*n;print b[max(range(len(b)-n),key=lambda i:b[i-1]*(i%n>0)+b[i+1]*(i%n<n-1)+b[i-n]+b[i+n])]

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


답변

스텐실 , 1 + 10 = 11 바이트 (비경쟁)

명령 줄 옵션 :  1 1 세대 계산

y⊃⍨⊃⍒,
+/N

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

y 편평 일본어 입력으로부터
⊃⍨ 선택
 첫
 내림차순으로
, 평탄화의를

+/
N 자아가없는 폰 뉴만 지역의  합