这是一个很简单的小问题,我认为这是以前没有人问过的。
编写一个程序或函数,其中包含四个正整数,表示可移动但不可折断和不可弯曲的直栅栏的长度。输出最大的长方形院子的面积,可以完全用这些栅栏围起来。
栅栏可以以90°的增量移动和旋转,但不能重叠或切割。在院子拐角处碰到的篱笆仍然算在那个拐角处的院子里。
例如,给定栅栏长度2、8、5和9,你能做的最好是使2和5边平行,8和9边平行于一个院子,即2×8:
888888885
2yyyyyyyy5
2yyyyyyyy5
9999999995
5让任何一方长一点,围栏就不会完全包围院子。因此,这里的产量,院子的面积,应该是16。
另一个例子是,给定1、1、2、2,可以建造的最大面积院子是2:
22
1yy1
22有第1区的院子
22
1y1
22是一个有效的院子,因为它的周长是完全围栏,但1是无效的输出,因为它不是最大的。
这是密码-高尔夫,所以最短的程序赢了!
您可能不会假设程序的4个整数输入是按任何特定顺序进行的。
下面是一些更多的测试用例:
Inputs -> Output
1,1,1,1 -> 1
1,2,3,4 -> 3
4,3,2,1 -> 3
90,1,2,1 -> 2
1,90,1,1 -> 1
44,51,50,36 -> 1800
3,3,3,3 -> 9
3,3,3,4 -> 9
3,4,3,4 -> 12
4,4,3,4 -> 12
4,4,4,4 -> 16发布于 2023-05-09 23:01:40
lambda*a:min(a)*sorted(a)[2]它是一个匿名函数,当被调用时,它返回答案,比如func(2,8,9,5) -> 16或func(1,1,2,2) -> 2。
除非我完全误解了我自己的问题,否则我相信它可以通过对4个输入数字进行排序,取最小的第二次最大的次数来解决,因为这两个边将分别与第二个最小和最大的平行。
就像如果排序的输入是a <= b <= c <= d,那么您可以做的最大的rect是区域a * c,其中边a与b并行,c与d并行,一些b和d栅栏可能会被浪费掉。
(我是这里的一个新用户,所以我很想知道这个Python是否可以被缩短。谢谢!)
发布于 2023-05-10 01:58:05
&napfp*与其他解决方案类似,这会对堆栈中的数字进行排序,以获得最小和第二大的数据。然后它会将它们加倍以得到答案。
&n - read in all the numbers
a - sort
p - discard top (largest)
f - flip two entries (pushes 2nd largest down)
p - discard top (3rd largest)
* - multiple what's left (smallest and 2nd largest)
- exits and prints what's on the stack as a number发布于 2023-05-10 01:18:28
https://codegolf.stackexchange.com/questions/260811
复制相似问题