유리가 반쯤 채워 졌는지 반쯤 비어 있는지에 대한 수사 학적 질문을 알고있을 것입니다 . 나는 그 구절에 조금 지쳐서 글래스 충만 또는 공허에 대한이 혼란을 프로그램 적으로 제거 할 때가되었다고 결정했다.
당신의 임무는 못생긴 유리 의 ASCII 예술 표현을 취하고 해당 좋은 유리 의 ASCII 예술을 출력하는 프로그램을 작성하는 것 입니다. 또한 유리인지를 결정하는 full
, mostly full
, mostly empty
또는 empty
출력이도 (4 어떤 일정한 별개 출력값을 수행).
TL; DR
입력은 유리 내부와 외부에 무작위로 분포 된 유리 ( #
문자)와 액체 ( a-z
) 의 ASCII 기술입니다 . 유리 내부의 액체가 떨어져 바닥에 쌓이고 외부의 액체는 버려집니다. 액체가 바닥에 정착 한 후 유리의 ASCII 아트를 출력합니다. 유리가 얼마나 가득 차 있는지 결정하고 출력하십시오.
못생긴 멋진 안경
유리 일반이 만들어진 컨테이너 #
바닥 두 측벽없고 위쪽 캐릭터.
- 유효한 안경에는 구멍이 없습니다. (모든
#
문자를 연결해야합니다.) #
입력 ASCII 아트의 각 줄에 두 개 이상의 문자가 있거나 없을 것입니다. 정확히 하나의 줄이 없습니다#
.- 입력 ASCII 아트의 맨 위 줄에는 항상 정확히 2가
#
있습니다. - 유효한 안경은 문자의 벽면에서 정확히 하나의 로컬 최소값을 갖습니다
#
. 이것은 액체가 어딘가에 갇힐 수 없음을 의미합니다. - 유리의 경계 벽에는 국소 최대 값이 없습니다.
#
유리 바닥 아래에는 아무것도 없습니다 .- 유리의 내부는 항상 연결된 공간 입니다.
- 입력에 선행 / 후행 공백과 줄 바꿈이있을 수 있습니다.
유효하고 유효하지 않은 안경의 예 :
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)
좋은 유리는 모든 액체가 바닥에 축적 된 유리입니다.
- 맨 아래부터 멋진 유리의 내부는 문자로 완전히 채워진 여러 줄로 구성되고, 문자로 완전히 채워지지 않은 최대 한 줄로 구성되며 빈 줄은 여러 줄로 구성됩니다.
- 멋진 유리 내부에는 액체가 없을 수 있습니다.
못생긴 유리를 멋진 유리로 전환
- 유리 내부의 액체가 떨어져 바닥에 쌓입니다.
- 유리 외부의 액체는 버려집니다.
- 못생긴 유리를 멋진 유리로 변환 할 때 정확한 글자를 보존해야합니다. 예를 들어, 못생긴 유리에 3이 들어 있으면
a
멋진 유리에도 3이 있어야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) 에서 프로그램을 실행하는 데 사용할 수있는 온라인 통역사 링크를 제공하십시오.