3×3 그리드에서 이웃 인덱스 반환 있습니다 (모든 예제는

코드 골프에 대한 두 번째 시도는 어떻게 진행되는지 봅시다.

9 값의 배열이 있다고 가정하십시오. 이제 3×3 그리드의 배열을 상상해보십시오.

해당 번호가 배열의 인덱스 인 이웃을 반환해야합니다.

0 | 1 | 2

3 | 4 | 5

6 | 7 | 8

규칙 :

  • 코드 골프이므로 최단 답변이 이깁니다.
  • 척 배열의 인덱스는 0 또는 1에서 시작할 수 있습니다 (모든 예제는 0을 사용합니다)
  • 그냥 값 값을 반환하는 것은 눈살을 찌푸리게한다 (같은 if 3: return 046)
  • 제출은 절차 / 함수 / 방법 일 수 있지만 예제는 좋을 것입니다
  • 반환 된 값은 임의의 순서 일 수 있습니다 (입력이 0 인 경우 13 또는 31 일 수 있음)
  • 당신이 원하는 경우, 출력은 예, 번호 목록이 될 수 [0,4,6]대신046
  • 예제에서 볼 수 있듯이 대각선은 계산되지 않습니다.

예 :

입력:

0

산출:

13

입력:

산출:

046

입력:

4

산출:

1357



답변

젤리 , 16 13 바이트

9Ḷ,d3ạ/S€=1T’

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

작동 원리

9Ḷ,d3ạ/S€=1T’  Main link. Argument: n (0, ..., 8)

9              Set the return value to 9.
 Ḷ             Unlength; yield [0, ..., 8].
  ,            Pair; yield [[0, ..., 8], n].
   d3          Divmod 3; yield [[[0, 0], ..., [2, 2]], [n:3, n%3]]].
     ạ/        Reduce by absolute difference, yielding
               [[|0 - n:3|, |0 - n%3|], ..., [[|2 - n:3|, |2 - n%3|]].
       S€      Sum each, yielding
               [|0 - n:3| + |0 - n%3|, ..., [|2 - n:3| + |2 - n%3|].
         =1    Compare the sums with 1.
           T   Truth; yield all 1-based indices of 1.
            ’  Decrement to yield all 0-based indices of 1.

답변

MATL , 17 16 바이트

9:qWIe1Y6Z+i)BPf

이 배열은 1부터 시작 1합니다 9. 즉 에서 까지의 숫자가 포함 됩니다 .

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

설명

2예를 들어 입력 을 고려하십시오 .

9:q  % Push [0 1 2 ... 8]
     % STACK: [0 1 2 ... 8]
W    % Rise to 2, element-wise
     % STACK: [1 2 4 ... 256]
Ie   % Reshape as 3-row matrix (column-major order)
     % STACK: [1   8  64;
               2  16 128;
               4  32 256]
1Y6  % Push [0 1 0; 1 0 1; 0 1 0]
     % STACK: [1   8  64;
               2  16 128;
               4  32 256],
              [0   1   0;
               1   0   1;
               0   1   0]
Z+   % Convolution, maintaining size
     % STACK: [10  81 136;
               21 170 336;
               34 276 160]
i    % Take input, n
     % STACK: [10  81 136;
               21 170 336;
               34 276 160],
               2
 )   % Get n-th entry (1-based; column-major order)
     % STACK: 21
B    % Convert to binary
     % STACK: [1 0 1 0 1]
P    % Flip
     % STACK: [1 0 1 0 1]
f    % Find: gives indices of nonzeros. Implicitly display
     % STACK: [1 3 5]

답변

수학, 32 바이트

GridGraph@{3,3}~AdjacencyList~#&

배열 대신 그래프를 사용합니다. GridGraph@{3,3}아래에 표시된 3×3 격자 모양의 그래프를 생성합니다. Mathematica는 기본적으로 꼭지점에 대해 숫자 1-9로 레이블을 지정합니다. 그런 다음 ~AdjacencyList~#&정점의 이웃에게 알려줍니다.


답변

Mathematica, 40 바이트

{24,135,26,157,2468,359,48,579,68}[[#]]&

1- 색인. 답을 찾으십시오. Mathematica에서 누군가 더 잘할 수 있습니까?


답변

옥타브, 42 40 39 바이트

@(n,x=~e(3),y=x(n)=1)find(bwdist(x)==1)

1 기반 색인.

모든 테스트 사례를 확인하십시오.

설명:

x=~e(3);         % create a 3*3 matrix of zeros
x(n)=1;          % set the element with index n to 1
d=bwdist(x);     % compute the distance transform of the matrix
find(d == 1)     % find where the distance is 1.

예: n = 2

x =

   0   0   0
   1   0   0
   0   0   0

옥타브에서 데이터는 열 단위로 저장됩니다.

d =

   1.00000   1.41421   2.23607
   0.00000   1.00000   2.00000
   1.00000   1.41421   2.23607

거리가 1 인 논리 인덱스

d == 1

 1   0   0
 0   1   0
 1   0   0

find(d ==1)

 1
 3
 5

답변

파이썬 2, 71 바이트

lambda n:filter(abs,[(n-3)*(n>3),(n+3)*(n<7),~-n*(n%3!=1),-~n*(n%3>0)])

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


사전 정의 된 결과 목록에서 결과를 얻는 것이 더 짧습니다 (46 바이트).

[13,204,15,406,1357,248,37,468,57].__getitem__

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


답변

하스켈 , 74 71 68 바이트

f n=[x|x<-[n-3,n-1..n+3],0<x,x<10,gcd 3x<2||n-1/=x,gcd 3n<2||n+1/=x]

온라인으로 사용해보십시오! 1- 인덱스 그리드를 사용합니다. 사용법 예 : f 3returns [2,6].

편집 : Ørjan Johansen 덕분에 3 6 바이트를 절약했습니다 !


들어 77 75 바이트, 다음 함수는 #임의의 격자 크기에 대한 작동합니다 m:

n#m=[x|x<-[n-m,n-1,n+1,n+m],0<x,x<=m*m,gcd x m<m||n-1/=x,gcd n m<m||n+1/=x]

온라인으로 사용해보십시오!
n목록 [n-m,n-1,n+1,n+m]에는 네 개의 이웃이 모두 포함됩니다. x이 목록의 각 항목마다 왼쪽 격자 테두리와 왼쪽 테두리 를 적용하기 위해 격자 위 또는 아래에 있지 않은지 확인 -1<x하고 x<m*m확인 합니다.xmod n 3>0||n-1/=xmod(n+1)m>0||n+1/=x