Sie kennen wahrscheinlich die rhetorische Frage, ob ein Glas halb voll oder halb leer ist . Ich bin der Redewendung ein wenig überdrüssig geworden und habe beschlossen, dass es Zeit ist, diese Verwirrung über die Fülle oder die Leere des Glases programmatisch zu beseitigen.
Ihre Aufgabe ist es, ein Programm zu schreiben, das eine ASCII-Grafik eines hässlichen Glases aufnimmt und eine ASCII-Grafik eines entsprechenden schönen Glases ausgibt . Es hat auch zu entscheiden , ob das Glas full
, mostly full
, mostly empty
oder empty
und Ausgang dieses auch (alle 4 konstant, unterschiedliche Ausgangswerte tun).
TL; DR
Die Eingabe ist eine ASCII-Grafik aus Glas ( #
Zeichen) und Flüssigkeit ( a-z
), die zufällig innerhalb und außerhalb des Glases verteilt wird. Die Flüssigkeit im Glas fällt nach unten und sammelt sich am Boden. Die Flüssigkeit außerhalb des Glases wird verworfen. Geben Sie eine ASCII-Grafik des Glases aus, nachdem sich die Flüssigkeit am Boden abgesetzt hat. Bestimmen Sie, wie voll das Glas ist, und geben Sie es auch aus.
Hässliche und schöne Brille
Ein Glas ist im Allgemeinen ein Behälter aus #
Zeichen mit einem Boden, zwei Seitenwänden und keiner Oberseite.
- Gültige Gläser haben keine Löcher. (Alle
#
Charaktere müssen verbunden sein.) #
In jeder Zeile der Eingabe-ASCII-Grafik sind entweder mindestens zwei Zeichen enthalten oder keine. Es wird keine Linie mit genau einer geben#
.- Die oberste Zeile der Eingabe-ASCII-Grafik enthält immer genau zwei
#
. - Gültige Brillen haben genau ein lokales Minimum in ihrer begrenzenden Zeichenwand
#
. Dies bedeutet, dass keine Flüssigkeit irgendwo eingeschlossen werden kann. - Die Begrenzungswand eines Glases hat keine lokalen Maxima.
- Es gibt keine
#
unter dem Boden des Glases. - Das Innere des Glases wird immer ein zusammenhängender Raum sein .
- Möglicherweise enthält die Eingabe führende / nachfolgende Leerzeichen und Zeilenumbrüche.
Beispiele für gültige und ungültige Brillen:
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.
# # #
# #
#######
Ein hässliches Glas ist ein Glas, in dessen Innerem Flüssigkeit herumschwimmt.
- Flüssigkeit wird durch Kleinbuchstaben dargestellt
a-z
. - Über der ersten Zeichenzeile befindet sich keine Flüssigkeit
#
. Dies bedeutet, dass keine Flüssigkeit in das Glas gelangen muss. - Möglicherweise befindet sich Flüssigkeit außerhalb des Glases . Diese Flüssigkeit wird verworfen, wenn das hässliche Glas in ein schönes Glas umgewandelt wird.
Beispiele für hässliche Brillen :
# 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)
Ein schönes Glas ist ein Glas, in dem sich die gesamte Flüssigkeit am Boden angesammelt hat.
- Das Innere eines schönen Glases besteht von unten nach oben aus einer Reihe von Zeilen, die vollständig mit Buchstaben gefüllt sind, gefolgt von höchstens einer Zeile, die nicht vollständig mit Buchstaben gefüllt ist, und einer Reihe von Zeilen, die leer sind.
- Außerhalb des Inneren eines schönen Glases darf sich keine Flüssigkeit befinden.
Umwandlung eines hässlichen Glases in ein schönes Glas
- Die Flüssigkeit im Glas fällt nach unten und sammelt sich am Boden.
- Flüssigkeit außerhalb des Glases wird verworfen.
- Wenn Sie ein hässliches Glas in ein schönes Glas verwandeln, müssen die genauen Buchstaben darin erhalten bleiben. Zum Beispiel, wenn das hässliche Glas drei
a
hat, muss das schöne Glas auch drei habena
. (Soda verwandelt sich nicht plötzlich in Wasser.) - Die Buchstaben im schönen Glas müssen nicht bestellt werden.
- Die Form des Glases muss erhalten bleiben. Es
#
dürfen keine Zeichen hinzugefügt oder entfernt werden. - Beliebig viele führende / nachfolgende Leerzeichen und Zeilenumbrüche sind zulässig.
Bestimmung der Glasfülle
- Ein Glas ist,
full
wenn sein gesamter Innenraum mit Buchstaben gefüllt ist. - Es ist,
mostly full
wenn 50% oder mehr des Innenraums gefüllt ist. - Es ist,
mostly empty
wenn weniger als 50% des Innenraums gefüllt ist. - Es ist,
empty
wenn keine Buchstaben im Glas sind. - Es kann eine beliebige Anzahl zusätzlicher Zeilenumbrüche und Leerzeichen zwischen dem ASCII-Grafikglas und der Ausgabe des Füllstands geben.
- Das Programm kann unterschiedliche (aber konstante!) Werte für die 4 Stufen der Glasfülle ausgeben, es muss nicht die exakten Zeichenfolgen oben drucken. Bitte geben Sie an, welcher Wert für welchen Füllstand steht.
I / O-Beispiele
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
Sonstiges
- Dies ist Codegolf, also gewinnt die kürzeste Antwort.
- Stellen Sie nach Möglichkeit einen Link zu einem Online-Interpreter bereit, mit dem Sie Ihr Programm auf den bereitgestellten Beispieleingaben ausführen können , z. B. tio.run