输入项
您在此挑战中输入的是整数对列表。它们表示平面上单位正方形的西南角,列表表示它们作为平面的子集的并集。例如清单
[(0,0),(1,0),(0,1),(1,1),(2,1),(1,2),(2,2)]
代表此图片中的红色集:
输出量
您的输出是一个整数四倍列表,代表平面的矩形子集。更明确地说,四元组(x,y,w,h)
代表一个矩形,该矩形的宽度w > 0
和高度为h > 0
西南角在(x,y)
。在每个单位正方形是某个矩形的子集,每个矩形是该区域的子集的意义上,矩形必须形成输入区域的精确覆盖,并且两个矩形只能在其边界处重叠。为了避免琐碎的解决方案,封面不得包含两个可以合并成更大矩形的矩形。
例如清单
[(0,0,2,1),(0,1,3,1),(1,2,2,1)]
代表法律保障
以上区域,而由
[(0,0,2,2),(2,1,1,1),(1,2,1,1),(2,2,1,1)]
是非法的,因为相邻的1乘1正方形可以合并:
规则
您可以提供完整的程序或功能。在合理范围内,输入和输出的精确格式并不重要。最短的字节数获胜,并且不允许出现标准漏洞。我们鼓励您对算法进行解释,并提供一些示例输出。
测试用例
U形区域:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(2,0),(2,1),(3,0),(3,1),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5)]
大三角形:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(6,0),(6,1),(6,2),(6,3),(7,0),(7,1),(7,2),(8,0),(8,1),(9,0)]
带孔的正方形:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(3,0),(3,1),(3,2),(3,4),(3,5),(3,6),(3,7),(3,8),(3,9),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,7),(5,8),(5,9),(6,1),(6,2),(6,3),(6,5),(6,6),(6,7),(6,8),(6,9),(7,0),(7,1),(7,2),(7,3),(7,4),(7,5),(7,6),(7,7),(7,8),(7,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,4),(9,5),(9,6),(9,7),(9,8),(9,9)]
断开区域:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(4,0),(4,1),(4,2),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,6),(5,7),(5,8),(5,9),(6,0),(6,1),(6,2),(6,4),(6,5),(6,6),(6,7),(6,8),(6,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,7),(9,8),(9,9),(10,0),(10,1),(10,2),(10,3),(10,4),(10,5),(10,6),(10,7),(10,8),(10,9)]
验证者
使用此 Python 2程序来验证您的解决方案。它从STDIN中获取元组列表(输入)和四元组列表(您的输出),并用逗号分隔。
我还编写了此 Python 2程序来生成图片,您也可以使用它。它从STDIN中获取元组或四元组的列表,并生成一个名为的文件out.png
。它需要PIL库。如果需要,您也可以更改网格单元的大小和网格线的宽度。