背景
我要建篱笆。为此,我收集了一堆电线杆,并将其固定在地面上。我还收集了很多木板,将它们钉在电线杆上,以制作实际的围栏。我在建造东西时往往会被带走,很可能我会一直把木板钉在电线杆上,直到没有更多的地方放它们了。我想让你列举出我最终可能会遇到的障碍。
输入项
您的输入是一个二维整数坐标列表,以任何方便的格式表示极点的位置。您可以假定它不包含任何重复项,但是不能假设有关其顺序的任何信息。
这些板由两极之间的直线表示,为简单起见,我们仅考虑水平和垂直板。如果两极之间没有其他极或板,则可以将它们连接在一起,这意味着两板不能互相交叉。如果不能在其中添加新的板,则极和板的布置是最大的(等效地,在任何两个水平或垂直对齐的极之间有一个极或一个板)。
输出量
您的输出是可以使用极点构造的最大排列数。
例
考虑输入清单
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)]
从顶部看,杆的相应排列如下所示:
o
o o
o o
o o
o
可以使用这些极点构造三种最大的排列方式:
o o o
o-o o|o o-o
o----o o||| o o| | o
o-o o|o o-o
o o o
因此正确的输出是3
。
规则
您可以编写函数或完整程序。最低字节数获胜,并且不允许出现标准漏洞。
测试用例
[] -> 1
[(0,0),(1,1),(2,2)] -> 1
[(0,0),(1,0),(2,0)] -> 1
[(0,0),(0,1),(1,0),(1,1)] -> 1
[(1,0),(0,1),(-1,0),(0,-1)] -> 2
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)] -> 3
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(4,-1)] -> 3
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(4,-1),(0,-1)] -> 4
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(0,-1),(2,2)] -> 5
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(4,-1),(0,-1),(2,2)] -> 8
(0,-2)
不错。现在改变。