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 emptyo emptye 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 è
fullse il suo intero spazio interno è pieno di lettere. - È
mostly fullse il 50% o più dello spazio interno è riempito. - È
mostly emptyse viene riempito meno del 50% dello spazio interno. - È
emptyse 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