Anda mungkin tahu pertanyaan retoris tentang apakah gelas setengah penuh atau setengah kosong . Saya mulai bosan dengan kalimat itu, jadi saya memutuskan bahwa sudah waktunya untuk menghilangkan kebingungan tentang kepenuhan atau kekosongan gelas ini secara terprogram.
Tugas Anda adalah menulis sebuah program yang mengambil representasi seni ASCII dari kaca yang jelek dan menghasilkan seni ASCII dari gelas yang sesuai . Hal ini juga harus memutuskan apakah kaca adalah full
, mostly full
, mostly empty
atau empty
dan output ini juga (setiap 4 konstan, nilai output yang berbeda lakukan).
TL; DR
Input adalah seni ASCII dari gelas ( #
karakter) dan cairan ( a-z
) didistribusikan secara acak di dalam dan di luar kaca. Cairan di dalam gelas jatuh dan menumpuk di bagian bawahnya, cairan di luar itu akan dibuang. Keluarkan seni ASCII dari gelas setelah cairan mengendap di bagian bawah. Tentukan seberapa penuh gelas itu dan hasilkan juga.
Kacamata jelek dan bagus
Sebuah kaca pada umumnya adalah wadah yang terbuat dari #
karakter dengan bawah, dua dinding samping dan tidak ada atas.
- Kacamata yang valid tidak memiliki lubang di dalamnya. (Semua
#
karakter harus terhubung.) - Akan ada setidaknya dua
#
karakter di setiap baris input ASCII art, atau tidak ada. Tidak akan ada garis dengan tepat satu#
. - Baris teratas dari seni ASCII input akan selalu memiliki tepat dua
#
. - Kacamata yang valid memiliki tepat satu minimum lokal di dinding
#
karakter pembatasnya . Ini berarti cairan tidak bisa terjebak di suatu tempat. - Dinding pembatas gelas tidak akan memiliki maxima lokal.
- Tidak akan ada apapun di
#
bawah bagian bawah gelas. - Interior kaca akan selalu menjadi ruang yang terhubung .
- Mungkin ada spasi / baris terdepan dan baru pada input.
Contoh kacamata yang valid dan tidak valid:
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.
# # #
# #
#######
Sebuah kaca jelek adalah kaca dengan cairan hanya melayang-layang di interior.
- Liquid diwakili oleh huruf kecil
a-z
. - Tidak akan ada cairan di atas
#
karakter baris pertama . Ini berarti bahwa itu tidak diperlukan untuk memungkinkan cairan jatuh ke gelas. - Mungkin ada cairan di luar gelas . Cairan ini akan dibuang ketika mengubah gelas jelek menjadi gelas yang bagus.
Contoh-contoh kacamata jelek :
# 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)
Sebuah kaca bagus adalah kaca di mana semua cairan menumpuk di bagian bawah.
- Dari bawah ke atas, bagian dalam gelas yang bagus terdiri dari sejumlah garis yang sepenuhnya diisi dengan huruf, diikuti oleh paling banyak satu baris yang tidak sepenuhnya diisi dengan huruf, dan kemudian sejumlah garis yang kosong.
- Mungkin tidak ada cairan di luar bagian dalam gelas yang bagus.
Konversi gelas jelek menjadi gelas bagus
- Cairan di dalam gelas jatuh dan menumpuk di bagian bawah.
- Cairan di luar kaca akan dibuang.
- Saat mengubah gelas jelek menjadi gelas bagus, huruf-huruf yang tepat di dalamnya harus dilestarikan. Misalnya, jika kaca jelek memiliki tiga
a
di dalamnya, kaca yang bagus harus memiliki tigaa
juga. (Soda tidak tiba-tiba berubah menjadi air.) - Surat-surat di dalam gelas yang bagus tidak harus dipesan.
- Bentuk gelas harus dilestarikan. Tidak ada
#
karakter yang dapat ditambahkan atau dihapus. - Jumlah spasi spasial dan baris baru terkemuka / trailing diizinkan.
Menentukan kepenuhan gelas
- Gelas adalah
full
jika seluruh ruang interiornya diisi dengan huruf. - Itu
mostly full
jika 50% atau lebih dari ruang interior diisi. - Itu
mostly empty
jika kurang dari 50% dari ruang interior diisi. - Itu
empty
jika tidak ada huruf di gelas. - Mungkin ada sejumlah baris dan ruang tambahan baru antara kaca seni ASCII dan output kepenuhan.
- Program ini dapat menampilkan nilai yang berbeda (tetapi konstan!) Untuk 4 level kepenuhan gelas, tidak harus mencetak string yang tepat di atas. Silakan tentukan nilai mana yang mewakili tingkat kepenuhan mana.
Contoh 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
Lain-lain
- Ini adalah kode golf sehingga jawaban terpendek menang.
- Jika memungkinkan, harap berikan tautan ke juru bahasa online yang dapat digunakan untuk menjalankan program Anda pada contoh input yang disediakan, misalnya tio.run