Bạn có thể biết câu hỏi tu từ về việc một ly đầy một nửa hay một nửa trống . Tôi cảm thấy hơi mệt với cụm từ này, vì vậy tôi quyết định rằng đã đến lúc loại bỏ sự nhầm lẫn này về sự đầy đặn của thủy tinh hoặc sự trống rỗng theo lập trình.
Nhiệm vụ của bạn là viết một chương trình lấy biểu tượng nghệ thuật ASCII của một chiếc kính xấu xí và đưa ra một nghệ thuật ASCII của một chiếc kính đẹp tương ứng . Nó cũng có để quyết định xem cái ly full
, mostly full
, mostly empty
hay empty
và đầu ra này là tốt (bất kỳ 4 liên tục, giá trị sản lượng khác nhau làm).
TL; DR
Đầu vào là một nghệ thuật ASCII của kính ( #
ký tự) và chất lỏng ( a-z
) được phân phối ngẫu nhiên bên trong và bên ngoài kính. Chất lỏng trong thủy tinh rơi xuống và tích tụ ở đáy của nó, chất lỏng bên ngoài nó bị loại bỏ. Xuất ra một nghệ thuật ASCII của kính sau khi chất lỏng đã lắng xuống ở phía dưới. Xác định mức độ đầy đủ của kính và đầu ra.
Kính xấu và đẹp
Một chiếc kính nói chung là một vật chứa làm từ các #
ký tự có đáy, hai mặt bên và không có đỉnh.
- Kính hợp lệ không có lỗ trong chúng. (Tất cả các
#
ký tự phải được kết nối.) - Sẽ có ít nhất hai
#
ký tự trong mỗi dòng của nghệ thuật ASCII đầu vào, hoặc không có ký tự nào. Sẽ không có một dòng với chính xác một#
. - Dòng trên cùng của nghệ thuật ASCII đầu vào sẽ luôn có chính xác hai
#
. - Kính hợp lệ có chính xác một mức tối thiểu cục bộ trong bức tường
#
ký tự phân định của chúng . Điều này có nghĩa là chất lỏng không thể bị mắc kẹt ở đâu đó. - Bức tường phân định của một tấm kính sẽ không có cực đại cục bộ.
- Sẽ không có bất kỳ
#
dưới đáy của kính. - Nội thất của kính sẽ luôn là một không gian kết nối .
- Có thể có khoảng trắng hàng đầu / dấu và dòng mới trong đầu vào.
Ví dụ về kính hợp lệ và không hợp lệ:
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.
# # #
# #
#######
Một chiếc kính xấu xí là một chiếc kính với chất lỏng chỉ nổi xung quanh bên trong nó.
- Chất lỏng được thể hiện bằng các chữ cái viết thường
a-z
. - Sẽ không có chất lỏng trên dòng
#
ký tự đầu tiên . Điều này có nghĩa là không bắt buộc phải cho chất lỏng rơi vào kính. - Có thể có chất lỏng bên ngoài kính . Chất lỏng này sẽ bị loại bỏ khi chuyển đổi kính xấu xí thành một kính đẹp.
Ví dụ về kính xấu xí :
# 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)
Một ly đẹp là một ly mà tất cả chất lỏng đã tích tụ ở phía dưới.
- Từ dưới lên, bên trong của một chiếc kính đẹp bao gồm một số dòng chứa đầy các chữ cái, theo sau là nhiều nhất là một dòng không hoàn toàn chứa đầy các chữ cái, và sau đó là một số dòng trống.
- Có thể không có bất kỳ chất lỏng bên ngoài nội thất của một chiếc kính đẹp.
Chuyển đổi một chiếc kính xấu xí thành một chiếc kính đẹp
- Chất lỏng bên trong thủy tinh rơi xuống và tích tụ ở phía dưới.
- Chất lỏng bên ngoài của kính bị loại bỏ.
- Khi chuyển đổi một chiếc kính xấu xí thành một chiếc kính đẹp, các chữ cái chính xác trong nó phải được giữ nguyên. Ví dụ, nếu chiếc kính xấu xí có ba
a
cái trong đó, chiếc kính đẹp cũng phải có ba chiếca
. (Soda không đột nhiên biến thành nước.) - Các chữ cái trong kính đẹp không cần phải đặt hàng.
- Hình dạng của kính phải được bảo tồn. Không có
#
ký tự có thể được thêm hoặc xóa. - Bất kỳ số lượng khoảng trắng hàng đầu / dấu và hàng mới được cho phép.
Xác định độ đầy của kính
- Một tấm kính là
full
nếu toàn bộ không gian bên trong của nó chứa đầy các chữ cái. - Đó là
mostly full
nếu 50% hoặc nhiều hơn không gian nội thất được lấp đầy. - Đó là
mostly empty
nếu ít hơn 50% không gian bên trong được lấp đầy. - Đó là
empty
nếu không có chữ cái trong kính. - Có thể có bất kỳ số lượng dòng mới và khoảng trắng bổ sung nào giữa kính nghệ thuật ASCII và đầu ra đầy đủ.
- Chương trình có thể xuất bất kỳ giá trị riêng biệt (nhưng không đổi!) Cho 4 mức độ đầy đủ của kính, nó không phải in các chuỗi chính xác ở trên. Vui lòng chỉ định giá trị nào đại diện cho mức độ đầy đủ.
Ví dụ 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
Linh tinh
- Đây là mã golf nên câu trả lời ngắn nhất sẽ thắng.
- Nếu có thể, vui lòng cung cấp một liên kết đến một trình thông dịch trực tuyến có thể được sử dụng để chạy chương trình của bạn trên các đầu vào ví dụ được cung cấp, ví dụ: tio.run