Você provavelmente conhece a pergunta retórica sobre se um copo está meio cheio ou meio vazio . Estou ficando um pouco cansado da frase, então decidi que é hora de eliminar essa confusão sobre a plenitude ou o vazio de vidro programaticamente.
Sua tarefa é escrever um programa que obtenha uma representação artística ASCII de um copo feio e produza uma arte ASCII de um copo agradável correspondente . Ele também tem que decidir se o vidro é full
, mostly full
, mostly empty
ouempty
e saída deste, bem como (4 qualquer constante, os valores de saída distintas fazer).
TL; DR
Input é uma arte ASCII de vidro ( #
caracteres) e líquido (a-z
) distribuído aleatoriamente dentro e fora do copo. O líquido dentro do copo cai e se acumula no fundo; o líquido fora dele é descartado. Produza uma arte ASCII do vidro após o líquido assentar na parte inferior. Determine como o copo está cheio e produza também.
Óculos feios e agradáveis
Um copo em geral é um recipiente feito de #
caracteres com fundo, duas paredes laterais e sem topo.
- Óculos válidos não têm orifícios. (Todos os
#
caracteres precisam estar conectados.) - Haverá pelo menos dois
#
caracteres em cada linha da arte ASCII de entrada ou nenhum. Não haverá uma linha com exatamente uma#
. - A linha superior da arte ASCII de entrada sempre terá exatamente dois
#
. - Óculos válidos têm exatamente um mínimo local em sua parede delimitadora de
#
caracteres. Isso significa que o líquido não pode ficar preso em algum lugar. - A parede delimitadora de um copo não terá máximos locais.
- Não haverá nenhum
#
abaixo do fundo do copo. - O interior do vidro sempre será um espaço conectado .
- Pode haver espaços em branco à esquerda / à direita e novas linhas na entrada.
Exemplos de óculos válidos e inválidos:
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.
# # #
# #
#######
Um copo feio é um copo com líquido flutuando em seu interior.
- Líquido é representado pelas letras minúsculas
a-z
. - Não haverá líquido acima da primeira linha de
#
caracteres. Isso significa que não é necessário permitir que o líquido caia no copo. - Pode haver líquido fora do vidro . Este líquido será descartado ao converter o vidro feio em um copo bonito.
Exemplos de óculos feios :
# 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)
Um bom copo é um copo onde todo o líquido se acumulou na parte inferior.
- De baixo para cima, o interior de um copo bonito consiste em várias linhas que são completamente preenchidas com letras, seguidas por no máximo uma linha que não é completamente preenchida com letras e, em seguida, várias linhas vazias.
- Pode não haver líquido fora do interior de um copo bonito.
Conversão de um copo feio em um copo bonito
- O líquido dentro do copo cai e se acumula na parte inferior.
- O líquido fora do vidro é descartado.
- Ao converter um copo feio em um copo bonito, as letras exatas devem ser preservadas. Por exemplo, se o copo feio tem três
a
, o bom copo também deve ter trêsa
. (O refrigerante não se transforma subitamente em água.) - As letras dentro do belo copo não precisam ser encomendadas.
- A forma do vidro deve ser preservada. Nenhum
#
caractere pode ser adicionado ou removido. - Qualquer quantidade de espaço em branco à esquerda / à direita e novas linhas é permitida.
Determinando a plenitude do vidro
- Um copo é
full
se todo o seu espaço interior estiver cheio de letras. - É
mostly full
se 50% ou mais do espaço interior estiver preenchido. - É
mostly empty
se menos de 50% do espaço interior for preenchido. - É
empty
se não houver letras no copo. - Pode haver qualquer número de novas linhas e espaços adicionais entre o vidro artístico ASCII e a saída de plenitude.
- O programa pode gerar valores distintos (mas constantes!) Para os 4 níveis de plenitude do vidro, não precisa imprimir as seqüências exatas acima. Especifique qual valor representa qual nível de plenitude.
Exemplos 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
Diversos
- Isso é código de golfe, então a resposta mais curta vence.
- Se possível, forneça um link para um intérprete online que possa ser usado para executar seu programa nas entradas de exemplo fornecidas, por exemplo tio.run