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