삼각 그리드 : 간단하게 연결된 폴리이 아몬드


9

우리는 삼각형 격자 킥 에 있지만 삼각형 격자폴리 아미노 와 동등한 것이 있음을 지적하고 싶습니다 . 그들은 polyiamonds 라고하며 , 가장자리를 따라 등변 삼각형을 함께 붙임으로써 형성된 모양입니다. 이 도전에서 당신은 삼각형 격자의 어떤 부분 집합이 폴리 아몬드인지 그리고 그것들에 구멍이 있는지를 결정하게 될 것입니다. 구멍이있는 폴리 아몬드를 만드는 데 9 개의 삼각형 만 있으면되기 때문에 코드는 가능한 짧아야합니다.

격자

우리는 사용할 것이다 마틴의 삼각형 그리드 레이아웃을 입력을 위해 :

삼각 격자

삼각형의 중심이 대략 직사각형 격자를 형성하고 왼쪽 상단 삼각형이 위쪽을 가리키는 점에주의하십시오. 포함 된 삼각형과 포함되지 않은 삼각형을 나타내는 직사각형 "별표"를 제공하여이 그리드의 하위 집합을 설명 할 수 있습니다. 예를 들어,이지도 :

** **
*****

구멍을 포함하는 가장 작은 폴리이 아몬드에 해당합니다.

구멍이있는 9- 아몬드

구멍

위의 예와 같이 구멍 (영역없는 지역으로 사방이 둘러싸인 polyiamond의 일부가 들어있는 polyiamond 있다가 ) 위상 적으로 말하면,없는 단순히 연결 .

도전

위에 설명 된대로 "별표"를 입력으로받는 함수 나 프로그램을 작성하고 삼각형 격자의 표시된 부분 집합이 단순히 연결된 polyiamond 인 경우에만 진실을 출력합니다 .

더 많은 예

*** ***
*******

폴리 아몬드에 해당

구멍이없는 13- 아몬드

그것은 단순히 연결되어 있습니다.


*   *
** **
 ***

폴리 아몬드에 해당

구멍이없는 9- 아몬드

그것은 단순히 연결되어 있습니다.


**  **
*** **
 ****

non- polyiamond에 해당

재미없는 13 개의 삼각형

이는 단순히해도 연결되지 않을 것이다 했다 polyiamond.

입력 사양

  • 입력은 별표, 공백 및 줄 바꿈으로 만 구성됩니다.
  • 입력의 첫 문자는 항상 공백 또는 별표입니다 (격자의 왼쪽 상단 모서리에있는 위쪽을 가리키는 삼각형에 해당).
  • 첫 번째 줄과 마지막 줄에는 항상 별표가 하나 이상 있습니다.
  • 첫 번째 줄 이후의 줄이 비어 있지 않다는 보장은 없습니다. 행에 두 개의 줄 바꿈이 올바른 입력으로 나타날 수 있습니다.
  • 줄 길이가 모두 같을 필요는 없습니다.

승리 조건

이것은 바이트 단위의 최단 답변이 이깁니다.

테스트 사례

진실한지도 :

1) *

2) *
   *

3) **

4) *** ***
   *******

5) *   *
   ** **
    ***

6) *
   **
    *

7)    **
     ***
   ****

8) ****
   **   *
    *****

9) ***********
   **    **  **
    ****  **  **
              **
   ************

거짓지도 :

1) *
   *
   *

2) * *

3) *
    *

4)  **
   **

5) ***

   ***

6) ** **
   *****

7) **  **
   *** **
    ****

8)  *
    *

9) *****
   **   *
    *****

1
좋은 질문. 삼각 격자가 될 것이라면 , 인간이 시각화하기 쉽도록하기 AV VA\nVAVAV보다는 대신에 표현하는 것이 좋습니다 ** **\n*****. Martin의 ASCII 다이어그램 중 하나를 이미 편집했습니다.
Level River St

나는 특히 인간의 가독성에 관심이 없었습니다. 나는 작은 상태를 유지하면서 프로그램이 읽기 쉬운 것을하고 싶었습니다.
quintopia

따라서 기본적으로 모퉁이로만 "연결된"섹션이 있다면 거짓입니까?
Michael Klein

1
또는 전혀 연결되지 않은 부품이있는 경우. Martin은 다음과 같이 말합니다. 그림과지면이 모두 가장자리를 따라 연결되어 있으면 비행기를 다시 칠하기에 2 개의 홍수 채우기로 충분합니다.
quintopia

답변:


4

달팽이 , 95 바이트

F&
lr|=((ul.)2 ,l~a~)d|!((ul.)2 ,l~a~)u}\*}+l\ ,~a~|{\ (lr|=((ul.)2 ,l~a~)d|!((ul.)2 ,l~a~)u}+~

매크로 또는 어떤 종류의 역 참조를 구현하지 않았기 때문에 실제로 복제가 발생했습니다. 각 별에 대해 맨 왼쪽에있는 별의 경로가 있는지 확인하는 것입니다. 그리고 각 공간마다 그리드의 가장자리에 대한 경로가 있습니다.

F&                         ,, option F: pad lines with spaces to the length of the longest
                           ,, option &: print 1 iff match succeeds from every cell
lr                         ,, direction left or right, or
      | =((ul.)2 ,l~a~) d  ,, direction down, if we are an even number of orthogonal moves from the top left
      | !((ul.)2 ,l~a~) u  ,, or, direction up if we are odd number of moves from the top left
    }  \*                  ,, literal '*'
}+                         ,, 1 or more times
l\ ,~a~                    ,, check that we are on the leftmost * in the top line

|                          ,, the part before this is for starting on '*'; part after for starting on ' '

{ \                        ,, literal ' '
    (   lr                 ,, direction left or right, or
      | =((ul.)2 ,l~a~) d  ,, same drill as before...
      | !((ul.)2 ,l~a~) u 
}+                         ,, 1 or more times
~                          ,, end on an out of bounds cell

나는 그것이 어떻게 작동하는지 이해하지 못하지만 완전히 작동합니다.
quintopia

3

CJam, 101 98 바이트

qN/_z,f{' e]}{S2*f+W%z}4*:eeee::f+:~{_(aL{+_{_2,.+1$2,.-@_:+1&!2*(a.+}%2${a1$&},\;@1$-@@}h;\;-}2*!

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

마침내 CJam에서 범람을 이행해야한다는 두려움을 극복했습니다. 내가 예상했던 것만 큼 추악하고, 가장 확실하게 골프를 칠 수 있습니다.

일반적인 아이디어는 두 개의 플러드 채우기 (실제로 방문하지 않은 셀 목록에서 제거로 구현 됨)를 수행하는 것입니다. 첫 번째 패스는 가장자리에서 도달 할 수있는 모든 공간을 제거합니다. 두 번째 패스는 *읽기 순서 에서 첫 번째 패스를 선택하고 그로부터 도달 가능한 모든 삼각형을 제거합니다. 결과 목록이 비어있는 경우에만 폴리 아몬드는 단순히 연결되었습니다.

  • 폴리 아몬드에 구멍이 있으면 첫 번째 플러드 필이 해당 구멍에 닿아 제거 할 수 없습니다.
  • 입력이 여러 개의 분리 된 폴리 아몬드로 구성된 경우 두 번째 플러드 필이 도달하여 모두 제거 할 수 없습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.