Probablemente conozca la pregunta retórica de si un vaso está medio lleno o medio vacío . Me estoy cansando un poco de la frase, así que decidí que es hora de eliminar esta confusión sobre la plenitud o el vacío del vidrio mediante programación.
Su tarea es escribir un programa que tome una representación artística ASCII de un vidrio feo y genere un arte ASCII de un vidrio agradable correspondiente . También tiene que decidir si el vidrio es full
, o mostly full
, y generar esto también (lo hacen 4 valores de salida constantes y distintos).mostly empty
empty
TL; DR
La entrada es un arte ASCII de un vidrio ( #
caracteres) y un líquido ( a-z
) distribuidos aleatoriamente dentro y fuera del vidrio. El líquido dentro del vidrio se cae y se acumula en su fondo, el líquido afuera se desecha. Imprima un arte ASCII del vidrio después de que el líquido se haya asentado en el fondo. Determine qué tan lleno está el vidrio y dé salida también.
Gafas feas y bonitas
Un vaso en general es un contenedor hecho de #
personajes con una parte inferior, dos paredes laterales y sin parte superior.
- Las gafas válidas no tienen agujeros en ellas. (Todos los
#
personajes tienen que estar conectados). - Habrá al menos dos
#
caracteres en cada línea del arte ASCII de entrada, o ninguno. No habrá una línea con exactamente una#
. - La línea superior del arte ASCII de entrada siempre tendrá exactamente dos
#
. - Las gafas válidas tienen exactamente un mínimo local en su muro de
#
caracteres delimitador . Esto significa que el líquido no puede quedar atrapado en alguna parte. - La pared delimitadora de un vaso no tendrá máximos locales.
- No habrá ninguna
#
debajo del fondo del cristal. - El interior del vidrio siempre será un espacio conectado .
- Puede haber espacios en blanco iniciales / finales y nuevas líneas en la entrada.
Ejemplos de gafas válidas e inválidas:
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 vaso feo es un vaso con líquido flotando en su interior.
- El líquido está representado por las letras minúsculas
a-z
. - No habrá líquido por encima de la primera línea de
#
caracteres. Esto significa que no es necesario permitir que el líquido caiga en el vidrio. - Puede haber líquido fuera del vaso. . Este líquido se desechará al convertir el vidrio feo en un buen vaso.
Ejemplos de gafas feas :
# 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 buen vaso es un vaso donde todo el líquido se ha acumulado en el fondo.
- De abajo hacia arriba, el interior de un bonito vaso consiste en una serie de líneas que están completamente llenas de letras, seguidas, como máximo, de una línea que no está completamente llena de letras, y luego una serie de líneas que están vacías.
- Es posible que no haya líquido fuera del interior de un buen vaso.
Conversión de un vaso feo en un vaso bonito
- El líquido dentro del vaso se cae y se acumula en el fondo.
- El líquido fuera del vidrio se desecha.
- Al convertir un vaso feo en un vaso bonito, deben conservarse las letras exactas. Por ejemplo, si el vidrio feo tiene tres
a
's', el buen vidrio también debe tener tresa
''. (La soda no se convierte de repente en agua). - Las letras dentro del vaso bonito no tienen que ser ordenadas.
- La forma del vidrio tiene que ser preservada. No
#
se pueden agregar ni eliminar caracteres. - Se permite cualquier cantidad de espacios en blanco iniciales / finales y nuevas líneas.
Determinación de la plenitud del vidrio.
- Un vaso es
full
si todo su espacio interior está lleno de letras. - Es
mostly full
si el 50% o más del espacio interior está lleno. - Sus
mostly empty
si se llena menos del 50% del espacio interior. - Es
empty
si no hay letras en el cristal. - Puede haber cualquier número de nuevas líneas y espacios adicionales entre el vidrio artístico ASCII y la salida de plenitud.
- El programa puede generar valores distintos (¡pero constantes!) Para los 4 niveles de plenitud del vidrio, no tiene que imprimir las cadenas exactas anteriores. Especifique qué valor representa qué nivel de plenitud.
Ejemplos de 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
Misceláneos
- Este es el código de golf, por lo que gana la respuesta más corta.
- Si es posible, proporcione un enlace a un intérprete en línea que pueda usarse para ejecutar su programa en las entradas de ejemplo proporcionadas, por ejemplo tio.run