Probabilmente conosci la domanda retorica se un bicchiere è mezzo pieno o mezzo vuoto . Mi sto stancando un po 'della frase, quindi ho deciso che è tempo di eliminare programmaticamente questa confusione sulla pienezza o sul vuoto del vetro.
Il tuo compito è quello di scrivere un programma che prende una rappresentazione di arte ASCII di un brutto vetro e genera un'arte ASCII di un bel vetro corrispondente . Ha anche decidere se il vetro è full
, mostly full
, mostly empty
o empty
e uscita questo pure (ogni 4 costante, valori di uscita distinti fanno).
TL; DR
L'input è un'arte ASCII di un vetro ( #
caratteri) e liquido ( a-z
) distribuito casualmente all'interno e all'esterno del vetro. Il liquido all'interno del bicchiere cade e si accumula sul fondo, il liquido all'esterno di esso viene scartato. Stampa un'arte ASCII del vetro dopo che il liquido si è depositato sul fondo. Determina quanto è pieno il vetro e produce anche quello.
Occhiali brutti e belli
Un bicchiere in generale è un contenitore fatto di #
personaggi con un fondo, due pareti laterali e nessun piano.
- Gli occhiali validi non presentano buchi. (Tutti i
#
personaggi devono essere collegati.) - Ci saranno almeno due
#
caratteri in ciascuna riga della grafica ASCII di input, oppure nessuno. Non ci sarà una linea con esattamente una#
. - La riga superiore dell'input ASCII art ne avrà sempre esattamente due
#
. - Gli occhiali validi hanno esattamente un minimo locale nel loro muro delimitante di
#
personaggi. Ciò significa che il liquido non può rimanere intrappolato da qualche parte. - La parete delimitante di un bicchiere non avrà massimi locali.
- Non ci sarà alcun
#
sotto il fondo del vetro. - L'interno del vetro sarà sempre uno spazio connesso .
- Potrebbero esserci spazi iniziali o finali nell'input.
Esempi di occhiali validi e non validi:
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 brutto bicchiere è un bicchiere con liquido che fluttua al suo interno.
- Il liquido è rappresentato dalle lettere minuscole
a-z
. - Non ci sarà liquido sopra la prima riga di
#
caratteri. Ciò significa che non è necessario per consentire al liquido di cadere nel bicchiere. - Potrebbe esserci del liquido all'esterno del vetro . Questo liquido verrà scartato quando si converte il brutto bicchiere in un bel bicchiere.
Esempi di brutti occhiali :
# 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 bel bicchiere è un bicchiere in cui tutto il liquido si è accumulato sul fondo.
- Dal basso verso l'alto, l'interno di un bel vetro è costituito da un numero di linee che sono completamente riempite di lettere, seguite da al massimo una linea che non è completamente riempita di lettere, e quindi un numero di linee che sono vuote.
- Potrebbe non esserci alcun liquido fuori dall'interno di un bel bicchiere.
Conversione di un brutto bicchiere in un bel bicchiere
- Il liquido all'interno del bicchiere cade e si accumula sul fondo.
- Il liquido all'esterno del vetro viene scartato.
- Quando si converte un brutto bicchiere in un bel bicchiere, le lettere esatte in esso devono essere conservate. Ad esempio, se il brutto bicchiere ha tre
a
"dentro", anche il bel vetro deve avere trea
". (La soda non si trasforma improvvisamente in acqua.) - Non è necessario ordinare le lettere all'interno del bel bicchiere.
- La forma del vetro deve essere preservata. Nessun
#
personaggio può essere aggiunto o rimosso. - È consentita qualsiasi quantità di spazi vuoti e newline iniziali / finali.
Determinare la pienezza del vetro
- Un bicchiere è
full
se il suo intero spazio interno è pieno di lettere. - È
mostly full
se il 50% o più dello spazio interno è riempito. - È
mostly empty
se viene riempito meno del 50% dello spazio interno. - È
empty
se non ci sono lettere nel bicchiere. - Potrebbe esserci un numero qualsiasi di nuove linee e spazi aggiuntivi tra il vetro artistico ASCII e l'output di pienezza.
- Il programma può generare valori distinti (ma costanti!) Per i 4 livelli di pienezza del vetro, non è necessario stampare le stringhe esatte sopra. Specificare quale valore rappresenta quale livello di pienezza.
Esempi di I / O
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
Varie
- Questo è il golf del codice, quindi vince la risposta più breve.
- Se possibile, fornire un collegamento a un interprete online che può essere utilizzato per eseguire il programma sugli input di esempio forniti, ad esempio tio.run