실패하는 성을 감지

중력의 흥미로운 측면 중 하나는 내가 아는 한, 공중에 떠 다니는 물건을 가질 수 없다는 것입니다.

그러나 무작위 성 건축업자 협회의 모든 사람들 이이 사실을 알고있는 것은 아니며 다음과 같은 성으로 이어집니다.

                      #
                      #
    #  #      #  #   ###
    ####      ####   # #
    #### #  # ####   ###
    ##############   ###
    ######  ######   ###
    #####    #####   ###
                     ###
``````````````````````````````

그리고 이것:

                                       # # #    # # #
                                       ##############
                                       ###  ####  ###
    #  #      #  #      #  #      #  # ###  ####  ### #  #      #  #      #  #      #  #
    ####      ####      ####      #### ############## ####      ####      ####      ####
    #### #  # #### #  # #### #  # #### ## ######## ## #### #  # #### #  # #### #  # ####
    ####################################################################################
    ######  ########  ########  ########  ########  ########  ########  ########  ######
    ###################################    ######    ###################################
    ###################################    ######    ###################################
                                       ##
                                         ##
                                           ##
                                             ##
                                               ##
````````````````````````````````````````````````````````````````````````````````````````````

그리고 이것조차도 :

       ##########
   ####   #      ###
#######################
            #
              #
                #
                  #
                    #  # # #
                  #   #  ###
                   #   # ###
                # # #  #  ##
                # # ##   ###
                 #  #  #####
                   #   #####
                  # #  #####
                       #####
                       ## ##
                       #####
                       #####
                       ## ##
                       ## ##
````````````````````````````````````````````

도전

유효한 성의 경우 모든 블록이 직간접 적으로지면에 연결됩니다. 귀하의 프로그램 또는 기능 에는 위와 같은 성이 입력으로 제공되며 , 성의 유효성 여부를 반영 하여 진실하거나 허위 가치를 반환해야합니다 .

규칙

  • 입력은 문자열로 제공됩니다.
  • 모든 유효한 성은 표면에 놓여 ````````있습니다. (입력 문자열 에 지표면이 포함 되지 않은 경우 성은 유효하지 않습니다.)
  • 모든 입력이 다음 기준을 충족한다고 가정 할 수 있습니다.
    • 표면은 항상 평평합니다.
    • 표면은 항상 성만큼 넓을 것이므로지면의 왼쪽이나 오른쪽에 블록이 없습니다.
    • 입력은 절대 #표면 아래에 있지 않습니다 .
    • 입력에는이 챌린지에 지정된 문자 만 포함됩니다. ( #,, `공백 또는 줄 바꿈)
    • 입력에 항상 하나 이상의 문자가 포함되어 있다고 가정 할 수 있습니다.
  • 블록이 수평 또는 수직으로 인접한 경우 연결됩니다. 대각선은 포함되지 않습니다!
    • 연결됨 :
      #	or	##
      #
    • 연결되지 않은:
      #      or	# #	or	 #
      #
      #
  • 성이 유효해야합니다. 다시 말해, 입력이없는 입력 #은 잘못된 값을 제공해야합니다.
  • 입력에는이 챌린지에 지정된 문자 만 포함됩니다. ( #,, `공백 또는 줄 바꿈)
  • 입력에 항상 하나 이상의 문자가 포함되어 있다고 가정 할 수 있습니다.
  • 표준 I / O허점 규칙이 적용됩니다.

테스트 사례

거짓

  • 위에 주어진 모든 예.
  • # # # # 
    #### ####
    #### ## ####
    ##############
    ###### ######
    ## ### #####

    (땅 없어요)

  • # 
    #######
    #### # # ####
    ############
    ###### ######
    ##### # # ####
    ``````````````

    (맨 위 블록은 가로 나 세로로 연결되어 있지 않습니다.)

  •    
    ```

    (성 없음)



  • # # # # #
    ##############
    ##### ## #####
    # # # # # # # # #### # # # #### # # # # # # # #
    #### #### #### #### ## #### ## #### #### #### ####
    ## ## ## # ##### # # #### # # #### # # #### # # #### # # ##### # # #### # # ####
    ################################################ ###############################
    ############## ## ##### ######## # ####### ############## ####### ##### ##
    ############################# ######## #############################
    ################################ ##### ############ ########################
    `````````````````````````` ```````````````````````````````````````````````````` ``````````````

    (중앙 타워는 가로 또는 세로로 연결된 블록이 없기 때문에 성의 나머지 부분과 연결되어 있지 않습니다.)

  •    

    (성 없음)


  • (성 없음, 단 하나의 개행 문자)

  • # # 
    #
    ```````

    (가장 오른쪽 블록은 가로 또는 세로로 연결되어 있지 않습니다.)

  •    
    ```

    (성 없음)

Truthy

  • # 
    `
  • # # # # 
    #### ####
    #### ## ####
    ##############
    ###### ######
    ## ### #####
    ``````````````
  •                       # 
    #
    # # #
    #### #### ##### # #
    #### # # #### ###
    ############## ###
    # ########### ###
    ##### ##### ###
    ##### ##### ###
    `````````` ````````````````````
  •                                        # # # # #    
    ##############
    ### #### ###
    # # # # # # # # ### #### # ### # # # # # # # #
    ##### #### #### #### ############ #### #### #### ### ##
    #### # # #### # # ##### # # #### ## ######## ## #### # # ##### # # ## ## # # ####
    ######################################## ######################################
    ###### #### ##### ######## # ####### ############## ####### ##### #### ######
    ############################### ###### # ##################################
    ################################ ##### ############ ########################
    `````````````````````````` ```````````````````````````````````````````````````` ``````````````````
  •                       #### ### 
    # #### ###
    # ###
    # ##
    #
    ###
    #####
    #######
    #########
    ### ## #### #
    ##### #####
    ###### #####
    ################
    # #### ########## #
    #############
    ###########
    ##############
    ###### ######
    ###### ######
    #############
    #############
    #############
    #############
    ###### ##### #
    ###### ######
    #############
    #############
    ########### ##
    #############
    ##### ######
    ######
    ################### ##
    #############
    #############
    #############
    ######### ####
    ##### #####
    ##### #####
    #########
    ```````````````` `````
  •                                                 
    # # # #
    #####
    ######
    # # # #
    # # # #
    #####
    ########
    ##########
    # # # # ######
    ###########
    ############
    ##############
    ##### ## ##############
    ########## #################
    ###########################################
    ####### ##############################
    ################## ###################
    ############################# ####
    #########################
    ################### #
    ````````````````````````````````````````````````` `

행운을 빕니다!



답변

달팽이 , 21 18 바이트

챌린지로 편집 된 추가 입력 제약으로 인해 -3 바이트

!{t=\#!(\#o`+\`}\#

불행히도 시간의 복잡성은 요인이되기 때문에 대부분의 입력을 실행할 수 없습니다.

허위 사례의 경우 0을 출력하고 실제 사례의 수 #를 출력합니다.

                 ,,
!{ t             ,, Assert that nowhere in the grid,
    =\#          ,, there is a '#'
    !(           ,, such that there does not exist
        (\# o)+  ,, an orthogonally connected path of '#'
        \`       ,, ending at a '`'
    )            ,,
}                ,,
\#               ,, Match '#' at starting position


답변

옥타브, 53 51 바이트

@(s)([~,n]=bwlabel(s>32,4))|n==1&&nnz(diff(+s)==61)

온라인으로 사용해보십시오!

* 빈 입력 응답을 확인하기 위해 op가 요구 사항을 삭제 한 후 첫 번째 편집으로 되돌 렸습니다.

설명:

nnz(s)                       check for empty input
([~,n]=bwlabel(s~=' ',4))    label nonempty regions and count number of labels

n==1                         check if number of labels is 1.

nnz(diff(+s)==61)            check if blocks connected to the surface


답변

Grime , 29 바이트

C=\`|\#&<0C>oX
e`\#&C!v#!&\##

온라인으로 사용해보십시오!
대부분의 테스트 사례는 TIO에서 시간 초과됩니다. 바꾸기 <0C><0CoF>조금 더 빨리 만들 수 있습니다.

설명

나는 모든 #곳에서 경로 `가 있고 적어도 하나가 있는지 확인하고 #있습니다. 최근 Grime에 회전 명령을 추가하여이 과제를 훨씬 쉽게 수행 할 수있었습니다.

C=\`|\#&<0C>oX  First line:
C=               Define nonterminal C as
  \`             the literal `
    |            or
     \#          the literal #
       &<  >     which is contained in a larger rectangle
         0C      containing said literal adjacent to a match of C
            oX   rotated by any multiple of 90 degrees.
e`\#&C!v#!&\##  Second line:
e`               Match entire input against this pattern:
         !       does not
       v#        contain
  \#             the literal #
    &C!          which is not a match of C,
          &      and
             #   contains
           \#    the literal #.


답변

자바 스크립트 (ES6), 197 196 바이트

f=(s,l=Math.max(...s.split`\n`.map(t=>t.length)),t=s.replace(/^.*/g,t=>t+' '.repeat(l-t.length)),u=t.replace(eval('/(#|`)([^]{'+l+'})?(?!\\1)[#`]/g'),'`$2`'))=>t==u?/#/.test(s)>/#/.test(t):f(s,l,u)

어디 \n리터럴 개행 문자를 나타냅니다. 에 #인접한 것을 찾아서로 `변경 하여 한 번에 하나씩 모든을 제거하려고 합니다 `. 원래 true하나 이상이 #있지만 모두 제거 된 경우를 반환 합니다 . 패딩 입력 요구 전 118 117 바이트 :

f=(s,t=s,u=t.replace(eval('/(#|`)([^]{'+s.search`\n`+'})?(?!\\1)[#`]/'),'`$2`'))=>t==u?/#/.test(s)>/#/.test(t):f(s,u)


답변

펄 6 , 180 바이트

{?/\#/&&?all map ->\c{my \b=[map {[$^a.comb]},.lines];sub f(\y,\x){with b[y;x] ->$_ {b[y;x]=0;/\#/??f(y+(1|-1),x)|f(y,x+(1|-1))!!/\`/??1!!|()}}(|c)},map {|($++X ^$^a.comb)},.lines}

입력에 하나 이상이 포함되어 #있는지, 그리고 모두 #가에 대한 경로를 찾을 수 있는지 확인합니다 `.

경로 찾기는 항상 #동일한 연결된 영역의 다른 모든 영역을 방문하는 (즉, 단락되지 않는) 재귀 함수를 사용하여 무차별 화되기 때문에 비효율적 입니다.

Junction 연산자와 slipping 간의 부정한 상호 작용을 사용 하여 경로 찾기 기능 외부를 별도로 검사하지 않고도 공백 문자에 대한 경로 테스트를 건너 뜁니다.


답변

파이썬 3 , 214206 바이트

def f(s):
 C=s.split('\n');n=max(map(len,C));o=[''];C=[*''.join(t.ljust(n)for t in C+o)]
 while C>o:o=C;C=['`'if z>' 'and'`'in{C[i+y]for y in(1,-1,n,-n)}else z for i,z in enumerate(C)]
 return'#'in{*s}-{*C}

온라인으로 사용해보십시오!

여기의 첫 번째 줄은 모든 줄을 같은 길이로 채우는 데 전념합니다. 우리는 문자열을 나누고 ( s.split('\n')한 자보다 짧습니다. s.splitlines()) 줄의 최대 길이를 찾은 다음 각각을 채운 후 모든 문자의 평평한 목록을 C에 할당합니다 선. 줄 바꿈이 사라졌습니다.

그런 다음 우리는 적어도 하나 개의 역 따옴표에 인접한 각 비 공백 문자는 역 따옴표로 대체 목록을 만들고, 변화가 발생하지 않을 때까지 이전 목록 경우 (계속 o같다 C. 우리와 비교할 수 C>o대신 C!=o때문에 # 교체 (ASCII 35 )와 함께 (ASCII 96)을 사용하면 목록의 사전 식 순서 만 증가시킬 수 있습니다.)

#이 남아 있지 않고 처음에 하나 이상이 존재하면 성은 유효합니다.

  • 설정된 차이가 아닌 #을 검사하는 8 바이트를 절약했습니다. '#'in s and'#'not in C

답변