グラスが半分いっぱいなのか半分空っぽなのかという修辞的な質問を知っているでしょう。私はこのフレーズに少しうんざりしているので、プログラムでガラスの膨らみや空さに関するこの混乱を解消する時が来たと判断しました。
あなたの仕事は、ASCIIいガラスの ASCIIアート表現を取り、対応する素敵なガラスの ASCIIアートを出力するプログラムを書くことです。それはまた、ガラスであるかどうかを決定しなければならないfull、mostly full、mostly emptyまたはempty出力これも(任意4定数、異なる出力値が何を)。
TL; DR
入力は、グラスの内側と外側にランダムに分布するグラス(#キャラクター)と液体(a-z)のASCIIアートです。ガラス内の液体は落下して底に溜まり、ガラス外の液体は廃棄されます。液体が底に落ち着いた後、グラスのASCIIアートを出力します。ガラスがどれだけいっぱいかを判断し、それも出力します。
glyい素敵なメガネ
ガラス一般的には、で作られた容器であり、#底部、両側壁なし上部と文字。
- 有効なメガネには穴がありません。(すべての#キャラクターを接続する必要があります。)
- #入力ASCIIアートの各行に少なくとも2つの文字があるか、ないかのいずれかです。正確に1つの行はありません- #。
- 入力ASCIIアートの一番上の行には、常に2があり#ます。
- 有効なメガネには、#キャラクターの境界壁に1つのローカルミニマムがあります。これは、液体がどこかに閉じ込められないことを意味します。
- ガラスの境界壁には局所的な最大値はありません。
- #ガラスの底の下には何もありません。
- ガラスの内部は常に接続されたスペースです。
- 入力に先頭/末尾の空白と改行が含まれる場合があります。
有効なメガネと無効なメガネの例:
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)
素敵なガラスは、すべての液体が底に蓄積されたガラスです。
- 素敵なガラスの内部は、下から上に、文字で完全に満たされた複数の行と、それに続く文字で完全に満たされていない行を最大1行、空の行で構成されています。
- 素敵なガラスの内部の外側に液体がないかもしれません。
いガラスを素敵なガラスに変える
- ガラス内部の液体は落下し、底に蓄積します。
- ガラスの外側の液体は廃棄されます。
- ugいガラスを素敵なガラスに変換するとき、その中の正確な文字を保存する必要があります。たとえば、いガラスに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)でプログラムを実行するために使用できるオンラインインタープリターへのリンクを提供してください