我最喜欢的数学消遣之一是绘制一个矩形网格,然后找到该网格中所有可见的矩形。在这里,提出这个问题,为自己冒险!
你能算出矩形的数量吗?
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
此4 x 4 微型基板的矩形总数正好是
100
你说得对吗?
相关数学: 8×8棋盘上有几个矩形?
挑战
编写最短的函数/程序,计算非环形网格/图像上可见矩形的总数。
相关挑战: 计算独特的矩形!,在2D字节数组中查找矩形的数量。
输入格式
您的函数或程序可以选择使用基于文本的输入或图形输入。
基于文本的输入
网格将是一个m × n(m行,n列)的ASCII网格,由以下字符组成:
- 空格,
-
对于水平线段的部分,|
对于垂直线段的部分,以及+
对于角落。
您可以将ASCII网格作为程序/函数的输入/参数引入,格式为
- 由换行符分隔的单个字符串,
- 一个没有换行符,但具有一个或两个整数的字符串,用于编码网格的尺寸,或者
- 字符串数组。
注意: 基于文本的输入至少包含1行和至少1列。
图形输入
或者,将网格编码为宽5 * n像素和高5 * m像素的黑白PNG图像。每个图像由5 px * 5 px的块组成,这些块对应于ASCII输入,方法是:
- 空格将转换为白色块。这些块称为空白块。
- 线段和角将转换为非空白块。这种块的中心像素是黑色的。
- 编辑:如果两个角(在ASCII输入中)通过线段连接,则相应的块中心(在图形输入中)也应通过黑线连接。
这意味着只能从中选择每个块 (单击此处查看大图)。
注意: 蓝色边界仅用于说明目的。图形输入至少5像素宽,5像素像素高。您可以将图形输入转换为任何单色图像(可能是其他图像文件格式)。如果您选择转换,请在答案中指定。转换不会受到任何惩罚。
输出格式
如果要编写程序,则它必须显示一个非负数,表示输入中矩形的总数。
如果要编写函数,它还应返回一个非负数,表示输入中矩形的总数。
案例案例
情况1,图形:(30像素* 30像素),ASCII:(6行,6列)
+--+
| |
| ++-+
+-++ |
| |
+--+
预期产量: 3
情况2中,图示:(20像素* 20像素),ASCII:(4行,4个 COLS)
++-+
|+++
+++|
+-++
预期产量: 6
情况3,图形:(55 px * 40 px),ASCII:(8行,11列)
+++--+
+-+++ |
| | ++--+
+--+--++ ++
| ||
| ||
++ +--++
++
预期产量: 9
情况4,图形:(120 px * 65 px),ASCII:(13行,24列)
+--+--+ +--+ +--+ +--+
| | | | | | | | |
+--+--+ | | | | | |
| | | +--+--+--+--+--+
+--+--+ | | | |
| | | | ++
+-+-+-+-+ +--+ +--+ ++
| | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
预期产量: 243
案例5,图解:(5 PX * 5。PX是的,这是那里!),ASCII:仅一个空格。
预期产量: 0
情况下如图6所示,图形:(35像素* 20像素),ASCII:(4行,7个 COLS)
+--+--+
|++|++|
|++|++|
+--+--+
预期产量: 5
假设条件
为了让生活更轻松,我们保证:
- 通过非环形,网格不会水平或垂直缠绕。
- 没有松散的末端,例如
+---
或+- -+
。所有线段都有两个末端。 - 此时
+
相交的两条线必须相交。 - 您不必担心输入无效。
应对标准漏洞的规则适用。请将正方形视为矩形。(可选)您可以删除网格每行上的尾随空格。
这是代码高尔夫球,因此请使输入尽可能短。基于文本和图形的解决方案将相互竞争。