Vous connaissez probablement la question rhétorique de savoir si un verre est à moitié plein ou à moitié vide . Je suis un peu fatigué de la phrase, j'ai donc décidé qu'il était temps d'éliminer cette confusion sur la plénitude ou la vacuité du verre par programme.
Votre tâche consiste à écrire un programme qui prend une représentation artistique ASCII d'un verre laid et génère un art ASCII d'un joli verre correspondant . Il doit également décider si le verre est full
, mostly full
, mostly empty
ou empty
et de sortie ainsi ce (toutes les valeurs de sortie distinctes, 4 constantes font).
TL; DR
L'entrée est un art ASCII d'un verre ( #
caractères) et liquide ( a-z
) répartis de manière aléatoire à l'intérieur et à l'extérieur du verre. Le liquide à l'intérieur du verre tombe et s'accumule à son fond, le liquide à l'extérieur est jeté. Sortez un art ASCII du verre après que le liquide se soit déposé au fond. Déterminez le niveau de remplissage du verre et imprimez-le également.
Lunettes laides et agréables
Un verre en général est un récipient composé de #
personnages avec un fond, deux parois latérales et pas de dessus.
- Les lunettes valides n'ont pas de trous. (Tous les
#
personnages doivent être connectés.) - Il y aura soit au moins deux
#
caractères dans chaque ligne de l'art ASCII d'entrée, soit aucun. Il n'y aura pas de ligne avec exactement un#
. - La ligne supérieure de l'art ASCII en entrée aura toujours exactement deux
#
. - Les lunettes valides ont exactement un minimum local dans leur mur de délimitation de
#
caractères. Cela signifie que le liquide ne peut pas être piégé quelque part. - La paroi de délimitation d'un verre n'aura pas de maxima locaux.
- Il n'y en aura pas
#
sous le fond du verre. - L'intérieur du verre sera toujours un espace connecté .
- Il peut y avoir des espaces en début / fin et des retours à la ligne dans l'entrée.
Exemples de lunettes valides et invalides:
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.
# # #
# #
#######
Un verre laid est un verre avec du liquide qui flotte juste à l'intérieur.
- Le liquide est représenté par les lettres minuscules
a-z
. - Il n'y aura pas de liquide au-dessus de la première ligne de
#
caractères. Cela signifie qu'il n'est pas nécessaire de permettre au liquide de tomber dans le verre. - Il peut y avoir du liquide à l' extérieur du verre . Ce liquide sera jeté lors de la conversion du verre laid en un beau verre.
Exemples de verres laids :
# 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)
Un beau verre est un verre où tout le liquide s'est accumulé au fond.
- De bas en haut, l'intérieur d'un joli verre se compose d'un certain nombre de lignes entièrement remplies de lettres, suivies d'au plus une ligne qui n'est pas complètement remplie de lettres, puis d'un certain nombre de lignes vides.
- Il ne doit pas y avoir de liquide à l'extérieur de l'intérieur d'un joli verre.
Conversion d'un verre laid en un joli verre
- Le liquide à l'intérieur du verre tombe et s'accumule au fond.
- Le liquide à l'extérieur du verre est jeté.
- Lors de la conversion d'un verre laid en un beau verre, les lettres exactes doivent être conservées. Par exemple, si le vilain verre en a trois
a
, le beau verre doit aussi en avoir troisa
. (Le soda ne se transforme pas soudainement en eau.) - Les lettres dans le joli verre ne doivent pas être commandées.
- La forme du verre doit être préservée. Aucun
#
caractère ne peut être ajouté ou supprimé. - Toute quantité d'espaces blancs de début / de fin et de nouvelles lignes est autorisée.
Déterminer la plénitude du verre
- Un verre est
full
si tout son espace intérieur est rempli de lettres. - C'est
mostly full
si 50% ou plus de l'espace intérieur est rempli. - Ses
mostly empty
si moins de 50% de l'espace intérieur est rempli. - C'est
empty
s'il n'y a pas de lettres dans le verre. - Il peut y avoir un certain nombre de nouvelles lignes et d'espaces supplémentaires entre le verre d'art ASCII et la sortie de plénitude.
- Le programme peut produire des valeurs distinctes (mais constantes!) Pour les 4 niveaux de plénitude du verre, il n'a pas à imprimer les chaînes exactes ci-dessus. Veuillez spécifier quelle valeur représente quel niveau de plénitude.
Exemples d'E / S
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
Divers
- C'est le golf de code, donc la réponse la plus courte l'emporte.
- Si possible, veuillez fournir un lien vers un interpréteur en ligne qui peut être utilisé pour exécuter votre programme sur les exemples d'entrées fournis, par exemple tio.run