Um dos meus passatempos matemáticos favoritos é desenhar uma grade retangular e, em seguida, encontrar todos os retângulos visíveis nessa grade. Aqui, faça esta pergunta e aventure-se!
Você pode contar o número de retângulos?
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
O número total de retângulos para este 4 x 4 bordo minichess é exatamente
100
Você estava correto?
Matemática relacionada: Quantos retângulos existem em um tabuleiro de xadrez 8 × 8?
O desafio
Escreva a função / programa mais curta que conte o número total de retângulos visíveis em uma grade / imagem não toroidal .
Desafios relacionados: Conte os retângulos exclusivos! , Encontre o número de retângulos em uma matriz de bytes 2D .
Formato de entrada
Sua função ou programa pode optar por trabalhar com entrada baseada em texto ou gráfica.
Entrada baseada em texto
A grade será uma grade ASCII m- por- n ( m linhas, n colunas), consistindo nos seguintes caracteres:
- espaços,
-
para partes de um segmento de linha horizontal,|
para partes de um segmento de linha vertical e+
para cantos.
Você pode introduzir essa grade ASCII como entrada / argumento para seu programa / função na forma de
- uma única sequência delimitada por quebras de linha,
- uma sequência sem novas linhas, mas com um ou dois números inteiros que codificam as dimensões da grade, ou
- uma matriz de seqüências de caracteres.
Nota: A entrada baseada em texto contém pelo menos 1 linha e pelo menos 1 coluna.
Entrada gráfica
Como alternativa, as grades são codificadas como imagens PNG em preto e branco de 5 * n pixels de largura e 5 * m pixels de altura. Cada imagem consiste em blocos de 5 px * 5 px que correspondem à entrada ASCII por:
- Os espaços são convertidos em blocos brancos. Esses blocos são chamados de blocos de espaço em branco .
- Os segmentos de linha e os cantos são convertidos em blocos que não são de espaço em branco. O pixel central desses blocos é preto.
- Editar: Se dois cantos (na entrada ASCII) estiverem conectados por um segmento de linha, os centros de bloco correspondentes (na entrada gráfica) também deverão ser conectados por uma linha preta.
Isso significa que cada bloco só pode ser escolhido (clique aqui para ampliar a imagem) .
Nota: Os limites azuis são apenas para fins ilustrativos. A entrada gráfica tem pelo menos 5 px de largura e 5 px de altura. Você pode converter a entrada gráfica em qualquer imagem monocromática, potencialmente em outros formatos de arquivo de imagem). Se você optar por converter, especifique na resposta. Não há penalidade para a conversão.
Formato de saída
Se você estiver escrevendo um programa, ele deve exibir um número não negativo indicando o número total de retângulos na entrada.
Se você estiver escrevendo uma função, ela também deve retornar um número não negativo, indicando o número total de retângulos na entrada.
Casos de exemplo
Caso 1, Gráfico: ( 30 px * 30 px), ASCII: ( 6 linhas, 6 colunas )
+--+
| |
| ++-+
+-++ |
| |
+--+
Saída esperada: 3
Caso 2, Gráfico: ( 20 px * 20 px), ASCII: ( 4 linhas, 4 colunas )
++-+
|+++
+++|
+-++
Saída esperada: 6
Caso 3, Gráfico: ( 55 px * 40 px), ASCII: ( 8 linhas, 11 colunas )
+++--+
+-+++ |
| | ++--+
+--+--++ ++
| ||
| ||
++ +--++
++
Saída esperada: 9
Caso 4, Gráfico: ( 120 px * 65 px), ASCII: ( 13 linhas, 24 colunas )
+--+--+ +--+ +--+ +--+
| | | | | | | | |
+--+--+ | | | | | |
| | | +--+--+--+--+--+
+--+--+ | | | |
| | | | ++
+-+-+-+-+ +--+ +--+ ++
| | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
Saída esperada: 243
Caso 5, Gráfico: ( 5 px * 5 px. Sim, está lá!), ASCII: Apenas um único espaço.
Saída esperada: 0
Caso 6, Gráfico: ( 35 px * 20 px), ASCII: ( 4 linhas, 7 colunas )
+--+--+
|++|++|
|++|++|
+--+--+
Saída esperada: 5
Suposições
Para facilitar a vida, você tem a garantia de que:
- Por não ser toroidal , a grade não quebra horizontalmente ou verticalmente.
- Não há pontas soltas, por exemplo ,
+---
ou+- -+
. Todos os segmentos de linha têm duas extremidades. - Duas linhas que se encontram em
+
devem se cruzar nesse ponto. - Você não precisa se preocupar com entradas inválidas.
Aplicam-se regras contra brechas padrão. Por favor, trate os quadrados como retângulos. Opcionalmente, você pode remover os espaços finais em cada linha da grade.
Isso é código-golfe , então faça sua entrada o mais curta possível. Soluções gráficas e baseadas em texto competirão juntas.