Dada uma matriz 2D não vazia que consiste em 0
e 1
, encontre o número de quadrados cujos quatro cantos são todos 1
. Os quadrados não precisam estar "na vertical". Todas as linhas são garantidas para ter o mesmo comprimento.
Métodos razoáveis de entrada / saída são permitidos.
Casos de teste:
0001000
1000000
0000000
0000100
0100000
Isso retorna 1
.
10101
00000
10100
00000
10001
Isso retorna 2
.
1111
1111
1111
1111
Isso retorna 20
.
Isso é código-golfe . A resposta mais curta em bytes vence. Aplicam-se brechas padrão .
1
s em um quadrado, de modo que cada um1
seja equidistante ao longo do perímetro de seus dois vizinhos.Respostas:
JavaScript (ES6),
127124119 bytesEconomizou 3 bytes graças a nderscore
Quão?
Essa função itera em todos os pares de células (x, y) , (X, Y) da matriz de entrada m, de modo que:
Cada par correspondente descreve as coordenadas de uma aresta em potencial de um quadrado. As inequações garantem que cada borda seja testada apenas uma vez.
Usamos o vetor [dx, dy] = [X - x, Y - y] girado 90 ° no sentido horário para testar as células localizadas em [x - dy, y + dx] e [X - dy, Y + dx] . Se os dois contiverem 1 , encontramos um quadrado válido.
Casos de teste
Mostrar snippet de código
fonte
g=(a,b)=>(m[b+X-x]||0)[a-Y+y]
-1 byte: use em|n
vez de&&n
MATL , 20 bytes
Entrada é uma matriz.
Experimente online!
Como funciona
Isso localiza todas as coordenadas de entradas diferentes de zero na grade de entrada e as representa como números complexos, de modo que os índices de linha e coluna correspondam às partes reais e imaginárias, respectivamente.
O código gera uma matriz de todas as combinações (a ordem não importa) desses números, obtidos 4 de cada vez. Cada combinação representa um quadrado candidato. Para cada combinação, a matriz 4 × 4 de diferenças absolutas aos pares (ou seja, distâncias no plano complexo) é calculada. Esta é uma matriz simétrica com zeros ao longo de sua diagonal principal. A combinação atual forma um quadrado se e somente se a matriz contiver exatamente 3 valores distintos (estes serão o lado quadrado, a diagonal quadrada e zero):
Por outro lado, por exemplo, um retângulo não quadrado daria origem a 4 valores distintos (dois lados, um valor diagonal e zero);
e um quadrilátero geral pode ter até 7 valores (quatro lados, duas diagonais e zero):
fonte