嗯,虽然这个挑战是一个巨大的成功,但它也是非常琐碎的解决。因此,对于那些寻找更多挑战的人,我创建了这个挑战的续集,您现在必须计算唯一矩形的数量。看看这个!现在,对于那些想要解决这个挑战的人来说,它来了。
好吧,我们还没有这样的挑战,所以我们开始吧。
考虑一下这个矩形的3 x 3
网格:
有几个长方形?嗯,从视觉上看,我们可以看到实际上有一些36
矩形,包括整个平面本身,它们都显示在下面的动画GIF中:
如上面所示,矩形的计数就是任务。换句话说,给定两个大于或等于0
、m
和n
的整数,其中m
表示宽度,n
表示高度,输出矩形在m x n
网格中的矩形总数。
以Array of Integers Input -> Integer Output
格式表示:
[0,0] -> 0
[1,1] -> 1
[3,3] -> 36 (Visualized above)
[4,4] -> 100
[6,7] -> 588
记住,这是密码-高尔夫,所以最短的代码赢了!
发布于 2016-08-01 05:36:46
lambda m,n:m*~m*n*~n/4
公式m*n*(m+1)*(n+1)/4
采用比特补码~m=-(m+1)
缩短,(m+1)*(n+1)
表示为~m*~n
.
为什么矩形的数量是m*n*(m+1)*(n+1)/4
?每个矩形通过选择两条水平线(顶部和底部)和两条垂直线(左和右)来指定。有m+1
水平线,其中我们选择两个不同的子集。所以选择的数量是choose(m+1,2)
,也就是m*(m+1)/2
。将垂直行的n*(n+1)/2
选项乘以所得结果。
发布于 2016-08-01 05:41:29
https://codegolf.stackexchange.com/questions/87189
复制相似问题