您可能知道玻璃是半满还是半空的反问。我对这个词感到有些厌倦,所以我决定是时候以编程方式消除对玻璃充满或空虚的困惑了。
您的任务是编写一个程序,该程序采用 丑陋的玻璃杯并输出相应的精美玻璃杯的ASCII艺术作品。它也必须决定玻璃是否是full
,mostly full
,mostly empty
或empty
和输出这个问题,以及(4任何恒定的,不同的输出值做)。
TL; DR
输入是玻璃(#
字符)和液体(a-z
)在玻璃内部和外部随机分布的ASCII艺术。玻璃内的液体掉落并积聚在其底部,玻璃外的液体被丢弃。液体沉淀在底部后,输出玻璃的ASCII文字。确定玻璃杯已满并输出。
丑陋又漂亮的眼镜
通常,玻璃是由#
字符制成的容器,该字符具有底部,两个侧壁且没有顶部。
- 有效的眼镜上没有孔。(
#
必须连接所有字符。) #
输入ASCII文字的每行中至少要有两个字符,或者没有。没有一行恰好一条#
。- 输入的ASCII艺术作品的顶行将始终恰好有两个
#
。 - 有效的眼镜在其定界
#
字符壁中恰好有一个局部最小值。这意味着液体不会被困在某处。 - 玻璃的分隔墙将没有局部最大值。
#
玻璃底部下方不会有任何东西。- 玻璃的内部将始终是一个连通的空间。
- 输入中可能包含前导/后缀空格和换行符。
有效眼镜和无效眼镜的示例:
VALID (possible input to your program):
# #
# #
####
# #
# #
# #
# #
# #
# #
##
# #
# #
### #
# #
####
# #
# #
# #
# #
# #
########
# #
# #
# ###
# ###
# ###
#####
INVALID (you won't get one of those as input to your program):
# #
# Has a hole.
####
# #
# # This is also considered a hole.
##
# #
# # Less than two # on a line.
#
## #
# # More than two # on the first line.
###
#
# # Less than two # on the first line.
###
# #
# # # More than one local minimum.
# # # # Liquid might get trapped.
### # #
###
# #
# #
#### Interior is not a connected space.
# #
# #
####
# #
# #######
# ### #
# ## # Has a local maximum.
# # #
# #
# #
######
# #
# #
# #
#####
# # <--- # below the bottom of the glass.
# #
# # # This is also a glass with a hole. The #'s aren't all connected.
# # #
# #
#######
一个丑陋的玻璃与液态只是在其内部漂浮的玻璃。
- 液体用小写字母表示
a-z
。 - 第一行
#
字符上方将没有液体。这意味着不需要让液体掉入玻璃杯中。 - 玻璃杯外面可能有液体。当将丑陋的玻璃杯变成漂亮的玻璃杯时,这种液体将被丢弃。
丑眼镜的例子:
# y b # i
x v#p q l# l
a # a zj # p g
g #ppcg c#
u # r n # r
##########
Discard Keep Discard
<-- There will never be liquid above the glass
# tz g#
#y abc # d
av z#ox s # l
c#y abth# b
#vg y rm# a
########
e a b c d <-- Discard this as well (not within interior)
一个漂亮的玻璃是所有液体已经积累在底部的玻璃。
- 从下至上,一个漂亮的玻璃杯的内部由多条完全用字母填充的行组成,然后是由多条没有完全由字母填充的行组成,然后是几行是空的。
- 好的玻璃杯内部可能没有任何液体。
将丑陋的玻璃杯变成漂亮的玻璃杯
- 玻璃内部的液体下落并积聚在底部。
- 玻璃外的液体被丢弃。
- 将丑陋的玻璃杯变成漂亮的玻璃杯时,必须保留其中的确切字母。例如,如果丑陋的杯子里面有三个
a
,那么漂亮的杯子就必须有三个a
。(苏打水不会突然变成水。) - 精美玻璃杯中的字母不必订购。
- 玻璃的形状必须保留。没有
#
添加或删除字符。 - 允许任何数量的前导/后跟空格和换行符。
确定玻璃充满度
- 一杯是
full
的整个内部空间都充满字母,那就是。 - 它是
mostly full
当充满内部空间的50%以上。 - 它的
mostly empty
如果内部空间的不到50%被填满。 - 这
empty
是否有玻璃没有字母。 - ASCII艺术玻璃和丰满度输出之间可以有任意数量的其他换行符和空格。
- 该程序可能会输出4个级别的玻璃充满度的任何不同(但恒定!)值,而不必在上面打印确切的字符串。请指定哪个值代表哪个丰满度。
I / O实例
Example 1 input:
# y b # i
x v#p q l# l
a # a zj # p g
g #ppcg c#
u # r n # r
##########
Example 1 output:
# #
# #
# #
#ppcglqb #
#yprazjnc#
##########
mostly empty
Example 2 input:
# tz g#
#y abc # d
av z#ox s # l
c#y abth# b
#vg y rm# a
########
e a b c d
Example 2 output:
# #
# bc #
#oxysa#
#ygabth#
#vgtyzrm#
########
mostly full
Example 3 input:
# #
# g # f
###ih # d
a c # # e
b ####
Example 3 output:
# #
# #
### g#
#hi#
####
mostly empty
Example 4 input:
#ab#
#cd#
####
Example 4 output:
#cb#
#da#
####
full
Example 5 input:
# # h
# #
a # # g
b# # f
c # #
# # e
d ##
Example 5 output:
# #
# #
# #
# #
# #
# #
##
empty
Example 6 input:
# b az#
#y s ###
###### t
l u
Example 6 output:
# z #
#ybsa###
######
mostly full
Example 7 input:
# # g
# b #f
# c###
#da ### i
# e###
##### h
Example 7 output:
# #
# #
# ###
#de ###
#abc###
#####
mostly empty
杂项
- 这是代码高尔夫球,因此最短的答案将获胜。
- 如果可能,请提供指向在线解释器的链接,该链接可用于在提供的示例输入上运行程序,例如tio.run