말해봐, 얼마나 많은 사각형이 있습니까?


12

구성된 비어 있지 않은 2 차원 배열을 감안 0하고 1, 네 모서리 모두를있는 사각형의 수를 찾을 수 있습니다 1. 사각형은 "수직"일 필요는 없습니다. 모든 행의 길이는 동일해야합니다.

합리적인 입 / 출력 방법이 허용됩니다.

테스트 케이스 :

0001000
1000000
0000000
0000100
0100000

이 반환합니다 1.

10101
00000
10100
00000
10001

이 반환합니다 2.

1111
1111
1111
1111

이 반환합니다 20.

이것은 입니다. 바이트 단위의 최단 답변이 이깁니다. 표준 허점이 적용됩니다.


의도를 이해하고 있다면 또 다른 해석 : 1사각형에 4 초, 각각 1이 이웃을 따라 주변을 따라 등거리에 있습니다.
feersum

@feersum 후자의 조건은 모든 사각형에 해당 되는가?
Wojowu

답변:


18

자바 스크립트 (ES6) 127 124 119 바이트

nderscore 덕분에 3 바이트 절약

m=>(F=(x,y)=>m.map((r,Y)=>r.map((i,X)=>i?1/y?n+=x<X&y<=Y&(g=(a,b)=>(m[b+X-x]||0)[a-Y+y])(x,y)&g(X,Y):F(X,Y):0)))(n=0)|n

어떻게?

이 함수 는 입력 행렬 m의 모든 셀 쌍 (x, y) , (X, Y) 에서 반복됩니다 .

  • m [x, y] = m [X, Y] = 1
  • x <X
  • y ≤ Y

각 일치 쌍은 정사각형의 잠재적 인 모서리 좌표를 나타냅니다. 방정식은 각 모서리가 한 번만 테스트되도록 보장합니다.

[x-dy, y + dx][X-dy, Y + dx]에 위치한 셀을 테스트하기 위해 시계 방향으로 90도 회전 한 벡터 [dx, dy] = [X-x, Y-y] 를 사용합니다 . 둘 다 1을 포함 하면 유효한 사각형을 찾았습니다.

광장

테스트 사례


-2 바이트 : g=(a,b)=>(m[b+X-x]||0)[a-Y+y]-1 바이트 : |n대신 사용&&n
nderscore

6

MATL , 20 바이트

&fJ*+4XN!"@&-|un3=vs

입력은 행렬입니다.

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

작동 원리

입력 그리드에서 0이 아닌 항목의 모든 좌표를 찾고 행 및 열 인덱스가 각각 실수 및 허수 부분에 해당하는 복소수로 표시합니다.

그런 다음 코드는 한 번에 4 개씩 취한이 숫자의 모든 조합 배열 (순서는 중요하지 않음)을 생성합니다. 각 조합은 후보 제곱을 나타냅니다. 각각의 조합에 대해, 페어 단위 절대 차이 (즉, 복소 평면에서의 거리)의 4 × 4 매트릭스가 계산된다. 주 대각선을 따라 0이있는 대칭 행렬입니다. 현재 조합은 행렬에 정확히 3 개의 고유 한 값이 포함 된 경우에만 정사각형을 형성합니다 (이 값은 정사각형, 정사각형 대각선 및 0 임).

여기에 이미지 설명을 입력하십시오

반면, 정사각형이 아닌 사각형은 4 개의 고유 한 값 (양쪽, 하나의 대각선 값 및 0)을 발생시킵니다.

여기에 이미지 설명을 입력하십시오

일반 사변형은 최대 7 개의 값 (4 개의 변, 2 개의 대각선 및 0)을 가질 수 있습니다.

여기에 이미지 설명을 입력하십시오

&f      % Input (implicit). Push vectors of row and column indices of nonzero entries
J*      % Multiply by imaginary unit
+       % Add the two vectors. Gives a vector of complex coordinates
4XN     % Matrix of combinations of these complex numbers, taken 4 at a time. Each
        % row is a combination
!       % Transpose
"       % For each column
  @     %   Push current column: candidate set of four points
  &-    %   All pair-wise differences
  |     %   Absolute value
  u     %   Unique entries
  n3=   %   Does the number of elements equal 3? Gives true (1) or false (0)
  vs    %   Concatenate vertically with previous accumulated result, and sum
        % End (implicit). Display (implicit)

어떻게 작동합니까?
Leaky Nun

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