코드 골프에 대한 두 번째 시도는 어떻게 진행되는지 봅시다.
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 3
returns [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
확인 합니다.x
mod n 3>0||n-1/=x
mod(n+1)m>0||n+1/=x