คุณอาจจะรู้คำถามเชิงโวหารว่าแก้วเป็นครึ่งเต็มหรือครึ่งที่ว่างเปล่า ฉันเริ่มเบื่อกับคำศัพท์นี้แล้วดังนั้นฉันจึงตัดสินใจว่าถึงเวลาที่จะขจัดความสับสนเกี่ยวกับความแน่นของแก้วหรือความว่างเปล่าทางโปรแกรม
งานของคุณคือการเขียนโปรแกรมที่ใช้เวลาการแสดงศิลปะ ASCII ของแก้วที่น่าเกลียดและผลงานศิลปะ ASCII ของที่สอดคล้องแก้วที่ดี นอกจากนี้ยังมีการตัดสินใจว่าแก้วเป็นfull
, mostly full
, mostly empty
หรือempty
และผลผลิตนี้เช่นกัน (4 ใด ๆ คงค่าเอาท์พุทที่แตกต่างกันทำ)
TL; DR
อินพุตเป็นศิลปะ ASCII ของแก้ว ( #
ตัวอักษร) และของเหลว ( a-z
) กระจายแบบสุ่มภายในและภายนอกของแก้ว ของเหลวภายในกระจกหล่นลงมาและสะสมที่ด้านล่างของเหลวด้านนอกจะถูกทิ้ง เอาท์พุทศิลปะ ASCII ของแก้วหลังจากที่ของเหลวได้ตัดสินที่ด้านล่าง ตรวจสอบว่าแก้วเต็มและออกที่เช่นกัน
แว่นตาน่าเกลียดและดี
แก้วโดยทั่วไปเป็นภาชนะที่ทำออกมาจาก#
ตัวละครที่มีด้านล่างสองผนังด้านข้างและด้านบนไม่มี
- แว่นตาที่ถูกต้องไม่มีรูในตัว (
#
ต้องเชื่อมต่ออักขระทั้งหมด) - จะมีอย่างน้อยสอง
#
ตัวอักษรในแต่ละบรรทัดของศิลปะ ASCII อินพุทหรือไม่มี#
จะไม่มีเส้นตรงกับหนึ่ง - บรรทัดบนสุดของศิลปะ ASCII อินพุทจะมีสอง
#
อย่างเสมอกัน - แว่นตาที่ถูกต้องมีขั้นต่ำอย่างน้อยหนึ่งท้องถิ่นในผนังของ
#
ตัวละคร ซึ่งหมายความว่าของเหลวไม่สามารถดักจับที่ไหนซักแห่งได้ - ผนังกั้นของแก้วจะไม่มีจุดสูงสุดในท้องที่
- จะไม่มี
#
ด้านล่างด้านล่างของแก้ว - การตกแต่งภายในของกระจกจะเป็นพื้นที่เชื่อมต่อเสมอ
- อาจมีช่องว่างนำหน้า / ต่อท้ายและขึ้นบรรทัดใหม่ในอินพุต
ตัวอย่างของแว่นตาที่ถูกต้องและไม่ถูกต้อง:
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.
# # #
# #
#######
แก้วน่าเกลียดเป็นแก้วที่มีของเหลวเพียงลอยรอบในการตกแต่งภายในของตน
a-z
ของเหลวจะถูกแทนด้วยตัวอักษรตัวพิมพ์เล็ก- จะไม่มีสภาพคล่องสูงกว่าบรรทัดแรกของ
#
อักขระ ซึ่งหมายความว่าไม่จำเป็นต้องให้ของเหลวตกลงไปในแก้ว - อาจจะมีของเหลวนอกของกระจก ของเหลวนี้จะถูกทิ้งเมื่อแปลงแก้วน่าเกลียดเป็นแก้วที่ดี
ตัวอย่างของแว่นตาน่าเกลียด :
# 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)
แก้วที่ดีเป็นแก้วที่มีสภาพคล่องทั้งหมดได้สะสมที่ด้านล่าง
- จากด้านล่างขึ้นไปด้านในของแก้วที่สวยงามประกอบด้วยเส้นจำนวนหนึ่งที่เต็มไปด้วยตัวอักษรอย่างสมบูรณ์ตามด้วยมากที่สุดหนึ่งบรรทัดที่ไม่ได้เติมด้วยตัวอักษรทั้งหมดและจากนั้นจำนวนบรรทัดที่ว่างเปล่า
- อาจไม่มีของเหลวใด ๆ อยู่ด้านนอกของกระจกด้านใน
การแปลงแก้วที่น่าเกลียดให้เป็นแก้วที่ดี
- ของเหลวที่อยู่ภายในกระจกจะตกลงมาและสะสมที่ด้านล่าง
- ของเหลวที่อยู่ด้านนอกของแก้วจะถูกทิ้ง
- เมื่อแปลงแก้วที่น่าเกลียดให้เป็นแก้วที่ดีตัวอักษรที่แน่นอนในนั้นจะต้องได้รับการเก็บรักษาไว้ ตัวอย่างเช่นหากแก้วที่น่าเกลียดมีสาม
a
อยู่ในนั้นแก้วที่ดีจะต้องมีสามa
เช่นกัน (โซดาไม่เปลี่ยนเป็นน้ำทันที) - ตัวอักษรในแก้วที่สวยงามไม่จำเป็นต้องสั่ง
- ต้องรักษารูปร่างของแก้ว ไม่
#
สามารถเพิ่มหรือลบอักขระได้ - จำนวนช่องว่างนำหน้า / ต่อท้ายและขึ้นบรรทัดใหม่ใด ๆ ที่ได้รับอนุญาต
การกำหนดความแน่นของแก้ว
- แก้วเป็น
full
ถ้าพื้นที่ภายในทั้งหมดเต็มไปด้วยตัวอักษร - มันคือ
mostly full
ถ้า 50% หรือมากกว่าของพื้นที่ภายในเต็มไป - มัน
mostly empty
ถ้าน้อยกว่า 50% ของพื้นที่ภายในเต็มไป - มัน
empty
ถ้ามีตัวอักษรในแก้วไม่มี - อาจมีการขึ้นบรรทัดใหม่และช่องว่างเพิ่มเติมจำนวนใด ๆ ระหว่างกระจกศิลป์ ASCII และเอาต์พุตความบริบูรณ์
- โปรแกรมอาจแสดงค่าที่แตกต่างกัน (แต่คงที่!) สำหรับความสมบูรณ์ของแก้ว 4 ระดับไม่จำเป็นต้องพิมพ์สตริงที่แน่นอนด้านบน โปรดระบุค่าที่แสดงถึงระดับความสมบูรณ์
ตัวอย่าง 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
อื่น ๆ
- นี่คือรหัสกอล์ฟเพื่อให้คำตอบที่สั้นที่สุดชนะ
- หากเป็นไปได้โปรดระบุลิงก์ไปยังล่ามออนไลน์ที่สามารถใช้เพื่อเรียกใช้โปรแกรมของคุณในอินพุตตัวอย่างที่ให้มาเช่นtio.run