Prawdopodobnie znasz retoryczne pytanie, czy szklanka jest w połowie pełna, czy w połowie pusta . Trochę mnie to znudziło, więc zdecydowałem, że nadszedł czas, aby programowo wyeliminować to zamieszanie związane ze szklaną pełnią lub pustką.
Twoim zadaniem jest napisanie programu, który pobiera grafikę ASCII brzydkiego szkła i generuje grafikę ASCII odpowiedniego ładnego szkła . Należy również zdecydować, czy szyba jest full
, mostly full
, mostly empty
i empty
i Efekt ten również (4 dowolny stały, różne wartości wyjściowe do).
TL; DR
Dane wejściowe to sztuka ASCII szkła ( #
znaków) i cieczy ( a-z
) rozmieszczonych losowo wewnątrz i na zewnątrz szkła. Ciecz wewnątrz szklanki opada i gromadzi się na jej dnie, ciecz na zewnątrz zostaje odrzucona. Wyjmij sztukę szklaną ASCII po ustabilizowaniu się cieczy na dnie. Określić, jak pełne jest szkło i wydrukować to również.
Brzydkie i ładne okulary
Szkło w ogóle jest pojemnik wykonany z #
znaków z dna, dwóch ścian bocznych i nie ma górnej.
- W ważnych okularach nie ma dziur. (Wszystkie
#
postacie muszą być połączone.) - W
#
każdej linii wejściowej grafiki ASCII będą albo co najmniej dwa znaki, albo brak. Nie będzie linii z dokładnie jedną#
. - Górny wiersz wejściowej grafiki ASCII zawsze będzie miał dokładnie dwa
#
. - Prawidłowe okulary mają dokładnie jedno lokalne minimum w ograniczającej ścianie
#
postaci. Oznacza to, że ciecz nie może gdzieś zostać uwięziona. - Ograniczająca ściana szkła nie będzie miała lokalnych maksimów.
- Pod
#
dnem szklanki nie będzie żadnych . - Wnętrze szkła zawsze będzie połączoną przestrzenią .
- Na wejściu mogą znajdować się początkowe / końcowe białe znaki i znaki nowej linii.
Przykłady prawidłowych i nieprawidłowych okularów:
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.
# # #
# #
#######
Brzydki szkło to szkło z cieczą tylko krąży w jego wnętrzu.
- Ciecz jest reprezentowana małymi literami
a-z
. - Nie będzie płynu powyżej pierwszej linii
#
znaków. Oznacza to, że nie jest wymagane, aby płyn dostał się do szklanki. - Na zewnątrz szkła może znajdować się ciecz . Ten płyn zostanie odrzucony podczas przekształcania brzydkiego szkła w ładne szkło.
Przykłady brzydkich szklanek :
# 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)
Ładne szkło jest szkłem gdzie cały płyn zgromadził na dole.
- Od dołu do góry wnętrze ładnej szklanki składa się z kilku linii, które są całkowicie wypełnione literami, po których następuje co najwyżej jedna linia, która nie jest całkowicie wypełniona literami, a następnie liczba linii, które są puste.
- Na zewnątrz dobrego szkła nie może znajdować się żaden płyn.
Przekształcenie brzydkiego szkła w ładny kieliszek
- Ciecz wewnątrz szklanki opada i gromadzi się na dole.
- Ciecz na zewnątrz szkła zostaje odrzucona.
- Podczas przekształcania brzydkiego szkła w ładne szkło należy zachować dokładne litery w nim. Na przykład, jeśli brzydkie szkło ma trzy
a
, to ładne szkło musi również mieć trzya
. (Soda nagle nie zamienia się w wodę.) - Litery w ładnej szklance nie muszą być zamawiane.
- Kształt szkła musi zostać zachowany. Żadnych
#
znaków nie można dodawać ani usuwać. - Dozwolona jest dowolna ilość początkowych / końcowych białych znaków i znaków nowej linii.
Określanie pełności szkła
- Szkło jest,
full
jeśli cała jego przestrzeń wewnętrzna jest wypełniona literami. - Dzieje się tak,
mostly full
gdy 50% lub więcej wewnętrznej przestrzeni jest wypełnione. - Dzieje się tak,
mostly empty
jeśli mniej niż 50% przestrzeni wewnętrznej jest wypełnione. - To jest,
empty
jeśli w szkle nie ma liter. - Może istnieć dowolna liczba dodatkowych znaków nowej linii i odstępów między szkłem artystycznym ASCII a wyjściem pełności.
- Program może wyświetlać dowolne wyraźne (ale stałe!) Wartości dla 4 poziomów wypełnienia szkła, nie musi drukować dokładnych ciągów powyżej. Proszę określić, która wartość reprezentuje poziom pełności.
Przykłady we / wy
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
Misc
- To jest golf golfowy, więc wygrywa najkrótsza odpowiedź.
- Jeśli to możliwe, podaj link do tłumacza online, którego można użyć do uruchomienia programu na podanych przykładowych danych wejściowych, na przykład tio.run