Вы, наверное, знаете риторический вопрос о том , наполовину ли стакан или наполовину пуст . Я немного устал от этой фразы, поэтому я решил, что пришло время программно устранить эту путаницу в отношении наполненности или пустоты стекла.
Ваша задача - написать программу, которая принимает ASCII-изображение уродливого стекла и выводит ASCII-изображение соответствующего красивого стакана . Он также должен решить , следует ли стекло full
, mostly full
, mostly empty
или empty
и выход этого , а также (любой 4 константы, различные выходные значения делать).
TL; DR
Ввод - это ASCII-изображение стекла ( #
символов) и жидкости ( a-z
), распределенных случайным образом внутри и снаружи стекла. Жидкость в стакане падает и накапливается на дне, а жидкость снаружи выбрасывается. Выведите ASCII art из стекла после того, как жидкость осядет на дне. Определите, насколько наполнен стакан, и выведите его.
Гадкие и красивые очки
Стекла в целом представляет собой контейнер , сделанный из #
символов с дном, двумя боковыми стенками и без верха.
- У действительных очков нет отверстий в них. (Все
#
персонажи должны быть связаны.) - В
#
каждой строке входного 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 уровней наполненности стекла, она не должна печатать точные строки выше. Пожалуйста, укажите, какое значение представляет какой уровень наполненности.
Примеры ввода / вывода
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