一个众所周知的谜题涉及到,使用3x3网格上的点可以计算出多少个正方形:
. . .
. . .
. . .答案是6-4个小方格,一个大正方形,一个正方形,由顶部,左,底部和右钉形成,边沿正方形的对角线。
您的任务是构建一个程序,计算可由一组点组成的方格总数。
您的程序将接受两种格式之一的输入(由您选择):
M或N网格组成的.或。.表示网格上的一个点,该点的正方形可以是一个角,网格上的所有空间都是水平或垂直相隔的一个单元。并返回使用所提供的点可以形成的不同平方的数目。您的程序必须为每个可能的输入返回正确的解决方案。
例如,以上面的输入为例,但是中间广场缺少的地方:
...
. .
...这里只有两个可能的方块(大的和对角的),所以程序应该返回2。
在任何语言中这样做的最短代码都是赢家。
发布于 2014-05-21 19:53:14
从stdin获取坐标列表。
l=input();print(sum((c-d+b,d+c-a)in l and(a-d+b,b+c-a)in l for a,b in l for c,d in l)-len(l))/4解释:
对于每一对点
(a,b)和(c,d),请检查是否有附加点(c-d+b,d+c-a)和(a-d+b,b+c-a)的正方形在列表中。这将每平方计数4次,每点计数一次(当(a,b) = (c,d)时),因此减去点数,除以4,得到正方形的数目。
https://codegolf.stackexchange.com/questions/28355
复制相似问题