免责声明:这个问题中讲的故事完全是虚构的,仅出于介绍目的而发明。
我有一个朋友,他是建筑师,在向他解释了代码高尔夫的概念和这个站点之后,他说我应该编写一些对变更有用的东西。我问他他认为有用吗?作为一名建筑师,他回答说,他很喜欢拥有一个平面规划师,该规划师为他提供了在一定尺寸的房屋中布置一定尺寸的房间的所有可能方案。我以为我将证明代码高尔夫球毕竟不是没有用,并以尽可能少的字节数为他提供此程序。
你的任务:
编写一个程序或函数,当给定包含整个房屋尺寸的数组D和包含内部房间尺寸的第二个数组R时,以ASCII艺术形式输出房屋内部房间的所有可能配置。
所有房间和房屋的外墙应形成为标准ASCII框,并使用| 垂直墙为-符号,水平墙为-符号,拐角为+符号。例如,尺寸为[4,4]的房屋看起来像:
+----+
| |
| |
| |
| |
+----+
如您所见,拐角不算作一组尺寸的一部分。-或|的数量 构成侧面的字符应等于尺寸中给定的数字。房间可以与房屋共用墙壁,也可以与房屋共用墙壁。房间内可能没有较小的房间。
例如,配置
+--+---+-+
| | | |
| | | |
+--+---+ |
| |
| |
+--------+
对于D = [5,8]和R = [[2,2],[2,3]]有效。
输入:
两个数组,其中一个包含两个整数(房屋的尺寸),另一个包含一系列包含房间尺寸的数组。
输出:
将所有可能的房屋组成的数组作为字符串,或者包含所有可能的房屋的字符串以某种一致的方式定界。请注意,完全相同配置的旋转次数仅应计算一次。
测试用例:
D R -> Output
[4,3] [[2,1],[4,1]] -> +-+-+ +-+-+ +-+-+ Note that though there is an option to switch which side the [2,1] room and the [4,1] room are on, doing so would merely be rotating the house by 180 degrees, and therefore these possibilities do not count.
| | | +-+ | | | |
+-+ | | | | | | |
| | | | | | +-+ |
| | | +-+ | | | |
+-+-+ +-+-+ +-+-+
[4,7] [[3,1],[4,2],[2,2] -> +----+--+ +----+--+ +----+--+ +----+--+ There are some more possiblities I didn't feel like adding, but it's the same four again, just with the [4,2] and the [2,2] room switched.
| | | | | | | | | | | |
| | | | | | | | | | | |
+---++--+ +--+-+-++ +-+--++-+ ++---+--+
| | | | | || | | | | || | |
+---+---+ +--+---++ +-+---+-+ ++---+--+
得分:
这是代码高尔夫球,最低得分(以字节为单位)获胜!
镜像是否算作同一配置?
否。您必须复制镜像的配置。
—
Gryphon
您的第一个测试用例不是错误的吗?
—
HatsuPointerKun
D = [4,2]
但是你的房子是[4,3]
吗?
@HatsuPointerKun,谢谢您发现该错字。现在已修复。
—
Gryphon
的确,建筑师在记事本中使用ASCII艺术来进行大多数设计是众所周知的事实。
—
桑契斯'17