Un de mes passe-temps mathématiques préférés est de dessiner une grille rectangulaire, puis de trouver tous les rectangles visibles dans cette grille. Ici, prenez cette question et aventurez-vous par vous-même!
Pouvez-vous compter le nombre de rectangles?
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
Le nombre total de rectangles pour cette planche minichess 4 x 4 est exactement
100
Aviez-vous raison?
Mathématiques connexes: Combien de rectangles y a-t-il sur un damier 8 × 8?
Le défi
Écrivez la fonction / le programme le plus court qui compte le nombre total de rectangles visibles sur une grille / image non toroïdale .
Défis connexes: comptez les rectangles uniques! , Trouver le nombre de rectangles dans un tableau d'octets 2D .
Format d'entrée
Votre fonction ou programme peut choisir de fonctionner avec une entrée textuelle ou une entrée graphique.
Saisie basée sur du texte
La grille sera une grille ASCII m- par- n ( m lignes, n colonnes) composée des caractères suivants:
- les espaces,
-
pour les parties d'un segment de ligne horizontale,|
pour les parties d'un segment de ligne verticale, et+
pour les coins.
Vous pouvez introduire cette grille ASCII comme entrée / argument dans votre programme / fonction sous la forme de
- une seule chaîne délimitée par des sauts de ligne,
- une chaîne sans retour à la ligne mais avec un ou deux entiers codant les dimensions de la grille, ou
- un tableau de chaînes.
Remarque: L'entrée textuelle contient au moins 1 ligne et au moins 1 colonne.
Entrée graphique
Alternativement, les grilles sont codées en noir et blanc images PNG de 5 * n pixels de large et 5 * m pixels de haut. Chaque image se compose de blocs de 5 px * 5 px qui correspondent à l'entrée ASCII par:
- Les espaces sont convertis en blocs blancs. Ces blocs sont appelés blocs d' espaces .
- Les segments de ligne et les coins sont convertis en blocs non blancs. Le pixel central de ces blocs est noir.
- Modifier: si deux coins (dans l'entrée ASCII) sont connectés par un segment de ligne, les centres de blocs correspondants (dans l'entrée graphique) doivent également être connectés par une ligne noire.
Cela signifie que chaque bloc ne peut être choisi que parmi (Cliquez ici pour agrandir l'image) .
Remarque: Les limites bleues sont uniquement à des fins d'illustration. L'entrée graphique mesure au moins 5 px de large et 5 px de haut. Vous pouvez convertir l'entrée graphique en n'importe quelle image monochrome, potentiellement d'autres formats de fichier image). Si vous choisissez de convertir, veuillez préciser dans la réponse. Il n'y a aucune pénalité à la conversion.
Format de sortie
Si vous écrivez un programme, il doit afficher un nombre non négatif indiquant le nombre total de rectangles dans l'entrée.
Si vous écrivez une fonction, elle doit également renvoyer un nombre non négatif indiquant le nombre total de rectangles dans l'entrée.
Exemples de cas
Cas 1, graphique: ( 30 px * 30 px), ASCII: ( 6 lignes, 6 cols)
+--+
| |
| ++-+
+-++ |
| |
+--+
Production attendue: 3
Cas 2, graphique: ( 20 px * 20 px), ASCII: ( 4 lignes, 4 cols)
++-+
|+++
+++|
+-++
Production attendue: 6
Cas 3, graphique: ( 55 px * 40 px), ASCII: ( 8 lignes, 11 colonnes )
+++--+
+-+++ |
| | ++--+
+--+--++ ++
| ||
| ||
++ +--++
++
Production attendue: 9
Cas 4, graphique: ( 120 px * 65 px), ASCII: ( 13 lignes, 24 cols)
+--+--+ +--+ +--+ +--+
| | | | | | | | |
+--+--+ | | | | | |
| | | +--+--+--+--+--+
+--+--+ | | | |
| | | | ++
+-+-+-+-+ +--+ +--+ ++
| | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
Production attendue: 243
Cas 5, graphique: ( 5 px * 5 px. Oui, il est là!), ASCII: un seul espace.
Production attendue: 0
Cas 6, graphique: ( 35 px * 20 px), ASCII: ( 4 lignes, 7 colonnes )
+--+--+
|++|++|
|++|++|
+--+--+
Production attendue: 5
Hypothèses
Pour vous faciliter la vie, vous avez la garantie que:
- En étant non toroïdal , la grille ne s'enroule ni horizontalement ni verticalement.
- Il n'y a aucune extrémité libre, par exemple
+---
ou+- -+
. Tous les segments de ligne ont deux extrémités. - Deux lignes qui se rencontrent à
+
doivent se croiser à ce point. - Vous n'avez pas à vous soucier des entrées invalides.
Les règles contre les failles standard s'appliquent. Veuillez traiter les carrés comme des rectangles. Vous pouvez éventuellement supprimer les espaces de fin sur chaque ligne de la grille.
Il s'agit de code-golf , alors faites votre entrée aussi courte que possible. Les solutions textuelles et graphiques seront en concurrence.