假设此空间网格和X
代表一些形状奇异的空冰块托盘的横截面:
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
不带X
的列表示无法容纳水的托盘中的孔或缝隙,从而排入了无限容量的水槽。从网格的最左边或最右边掉落的水也进入这个无尽的水槽。
如果我们将水龙头放置在托盘上方,并让它们充满水直到所有隔间中的水位保持稳定,则填充的确切隔间将取决于水流在托盘上方的确切位置。(假设有稀薄,稳定的水流,没有飞溅。)
例如,如果我们的水龙头F
在最左边的网格列上方
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
水会跌落到该X
列的最顶部,并左右扩散,左半部分溢出到下方的水槽中,右半部分填充2×1隔室。一旦隔间装满,右边的一半水就无处可流,只能流入水槽,并且各处的水位基本稳定。
关闭水龙头,托盘现在看起来像这样:(与~
水一起使用)
X X X
X~~X X XX X XX X
XXXXXX XXXXXXXXXXXXX
同样,如果我们将水龙头定位如下:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
它会填满最左边的两个隔间,但其余的水会流走:
X X X
X~~X~X XX X XX X
XXXXXX XXXXXXXXXXXXX
如果我们这样放置水龙头:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
水的左半部分将流入水槽,但右半部分最终将填满最右边的三个隔间,因为水在平面上水平行进的距离没有限制:
X X~X
X X X XX~X~~XX~~~X
XXXXXX XXXXXXXXXXXXX
定位如下:
F
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
所有的水都流走了,没有隔间被填满:
X X X
X X X XX X XX X
XXXXXX XXXXXXXXXXXXX
挑战
写一个程序或函数,它在空间,矩形栅格X
的,和一个F
。第一行将始终包含F
,否则仅包含空格。的X
的每一列中(如果有的话)将在来自电网的基实线向上延伸,即不会有洞穴或突出端。
如上所述,在水龙头F
装满水后,请打印或返回栅格~
。将第一F
行放在输出之外。
除水龙头排以外的网格至少为1×1,因此
F X
是您需要支持的最小输入。
输入将以完整的文本矩形形式出现。前导和尾随空格在输入和输出中很重要。例如输入
F X X XXXX
应该导致
X~~X XXXX
(请注意前导和尾随空格)
在输入或输出中仅包含一个尾随换行符就可以了。
你可以使用任何四个不同的打印的ASCII代替空格字符,
X
,F
,~
。
以字节为单位的最短代码获胜。
大例子:
输入:
F
X X
X X X
X XXX X X X X X
X X XXXXXXX X XXX XXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX
输出:
X~~~~~~~~~~~~~X
X~~~~~~~~~~~~~X~X
X~~~~~~~~~~~~XXX~~~~~~~X~~~~X~X~~~~~~~~~~~X X
X~~~X~~~~~XXXXXXX~~~~~~X~~~~XXX~~~~~XXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX
zip()
<3