참고 : 이것은 내 다른 대답 의 지속 및 개정입니다 .
축소 문제
의사 결정 문제를 상기하십시오.
고유 타일 로 주어진 그리드를 덮는 완벽한 타일링이 있습니까?n(n+1)×(n+2)n
따라서 그리드의 경우 변수 만 사용할 수 있습니다 .n(n+1)×(n+2)n
그러나:
- 우리의 감소는 필요 훨씬 더 이상의 고유 변수를 .O(n)
- 또한 전선이 개방되어있어 다음과 같은 결과가 발생합니다.
- 열린 공간을 타일링 할 수 있다는 것을 어떻게 알 수 있습니까?
첫 번째 문제를 해결하기 위해 게임 보드를 인위적으로 크게 만듭니다. 본질적으로 우리 는 실제로 필요한 변수의 수와 동일하게 한 다음 크기 의 그리드를 만들고 그리드를 왼쪽 아래 모서리에 놓습니다. 이것은 2 차 폭발로 이어질 것입니다.( n + 1 ) × ( n + 2 )n(n+1)×(n+2)
두 번째 문제는 가제트를 다시 생각해야합니다.
규칙에 따라 보드의 나머지 부분을 성공적으로 타일링 할 수 있음을 증명하는 것은 약간 어려워 보일 수 있습니다. 따라서 우리는 실제로 크기의 게임 보드를 생성하는 데 사용하는 것과 동일한 전략으로 시작합니다 .(n+1)×(n+2)
먼저 가능한 모든 타일 세트를 생성합니다. 이 타일들은 모두 보드 위에 놓아야합니다. 그런 다음 타일을 제거하고 사각형을 남겨 둡니다.
그러나 Google 가젯은 특정 타일 세트가 배치 될 것이라고 보장하지 않습니다. 배치 된 타일은 상태에 따라 다릅니다. 우리가주의 깊게하는 가젯을 수정해야합니다 그래서 보장 특히 타일, 상태가 선택에 상관없이 삭제됩니다.
가제트를 살펴 보겠습니다.
와이어 및 절 게이트는 두 가지 이유로 문제가 있습니다.
- 우리는 와이어 또는 절 게이트를 둘러싼 정사각형이 올바르게 바둑판 식으로 배열 될 수 있다는 것을 모른다. 결국 일부 와이어는 왼쪽으로 밀고 다른 와이어는 오른쪽으로 밀 수 있으며 나머지 공백 사각형을 타일링하는 것은 쉽지 않습니다. 이 문제를 "흐름"문제라고합니다.
- 타일 세트에서 제거 할 타일을 알 수 있는 방법은 없습니다 . 한 상태에서는 와이어 또는 절 게이트의 한 사각형 집합이 타일링되고 다른 상태에서는 완전히 다른 사각형 집합이 타일링됩니다.
이러한 문제를 해결하려면
- 먼저 가능한 모든 타일 세트를 생성합니다. 이 타일들은 모두 보드 위에 놓아야합니다. 보드 위에 놓으면 타일이 세트에서 제거됩니다. 처음 에는 알지 못할 수도 있지만 공식을 아직 완전히 설명하지 않았으므로 필요에 따라 을 증가시키면서 새로운 타일 가능성을 모두 추가 할 수 있습니다 . 이 세트에서 제거하는 모든 타일은 배치 가능해야합니다 (적어도 수식이 만족스러운 경우 배치 가능해야합니다). 우리는 타일을 타일에서 제거하고 타일을 타일에서 "배출"하기 위해 타일을 게임 보드에 배치해야하는 의무를 이행 할 것을 요구합니다.nnn
- 우리는 신중하게하는 가젯을 디자인해야 보장 , 특히 타일이 제거됩니다 상태가 선택에 상관없이.
- 장치의 상태에 따라 보드 주위로 타일을 밀지 않도록 가제트를 닫아야합니다. 오히려 모든 주가 잘 정의 된 특정 영역 만 차지해야합니다.
- 대안 적으로, 모든 주가 잘 정의 된 영역을 차지할 수 있도록 보장 되어야합니다 . 이는 만족스러운 타일링을 보장하지만 특정 타일링이 발생한다고 보장하지는 않습니다. 이것은 Dominosa 게임과 같은 방식입니다.
- 먼저 타일이 세트로 생성됩니다.
- 그런 다음 타일을 임의의 구성으로 배치합니다.
- 각 타일이 배치되면 타일 세트에서 제거됩니다.
- 그런 다음 타일을 보드에서 제거하고 사각형을 남깁니다.
- 이것은 의도 된 구성 이 선택 될 것을 보장하지는 않습니다 .
- 오히려 의도 된 구성 을 선택할 수 있으므로 솔루션이 존재합니다. 여기서도 같은 일을 할 수 있습니다.
- 기본적으로 고유 한 정사각형 (예 : 모든 "공백") 을 배치하는 대신 공식의 모든 가제트를 배치 한 후 공백이 하나의 차원이있는 직사각형 영역인지 확인하거나 공백을 사용하여 사각형으로 구분합니다. 하나의 차원으로, 타일 세트의 나머지 타일과 함께 공백을 바둑판 식으로 배열합니다.⋆
- 세트에서 모든 타일을 배치하면 모든 것이 배치 가능하다는 것을 알 수 있습니다.
- 일부 타일은 벽에있는 타일과 같이 분명히 배치 가능하고 다른 타일은 가제트 간의 관계 특성으로 인해 수식을 만족할 수있는 경우에만 배치 할 수 있습니다.
- 그런 다음 타일을 제거하고 사각형을 남겨 둡니다.
가제트를 살펴 보겠습니다.
가제트 강제
우리는 각자 자신과 쌍을 이룰 수 없도록하여 임의의 수의 빌딩 블록을 만들 수 있습니다.
예를 들어 타일 을 강제로 사용하여 를 빌딩 블록. (참고로 는 임의의 변수로, 이전에 값을 사용했을 때 반드시 빌딩 블록 일 필요는 없습니다.1 ⋆ 1 ⋆ 1(1⋆,1⋆)1⋆1⋆1
-building-block reserve 를 보장하기 위해 바닥의 바닥 벽에 배치합니다. 다음과 같은 구성 : 예약 번호를 배치합니다. 을 벽에 대고 위로 붙입니다 ( 모양 ). 벽에 개, 가운데 2 열에 1 개. 그런 다음 다른 두 개의 숫자를 배치하고 및 ; 이들은이 가제트에 고유합니다. 우리는 이것을 왼쪽과 오른쪽의 합니다.( 1 ⋆ , 1 ⋆ ) 1 ⋆ ⊥ 3 2 ⋆ 3 ⋆ 1 ⋆1⋆(1⋆,1⋆)1⋆⊥32⋆3⋆1⋆
아래 그림에서 공유 된 검은 색 테두리는 게임 보드의 하단이며 왼쪽에서 오른쪽으로 설명됩니다.
- 가제트 구성 여기의 각 및 는이 가젯에 고유합니다.3 ⋆2⋆3⋆
- 센터 의 3 가지 가능한 상태입니다 .1⋆
이 일 후에, 우리는 우리의 가제트는 것을 보장 할 수 있습니다 우리의 가제트는 것을 보장하면서, 타일의 특정 세트 바둑판 식으로 배열 할 수 있어야 힘 쌍 .(1⋆,1⋆)
- 우리는 알고 때문에 낮은 중간의 3 개 가능한 타일링 상태, 발생해야 , 타일로 위의 오른쪽 그림과 같이1 ⋆ ( 1 ⋆ , 1 ⋆ )(1⋆,1⋆)1⋆(1⋆,1⋆)
- 나머지 타일 은 가젯을 포함하여 및 로 바둑판 식으로 배열 할 수 있습니다 . 따라서 전역 타일 세트에서 해당 타일을 제거 할 수 있습니다. 아래 그림이 있습니다.( 1 ⋆ , 3 ⋆ )(1⋆,2⋆)(1⋆,3⋆)
설명, 왼쪽에서 오른쪽으로 :
- 왼쪽, 위 : 왼쪽 상태, 왼쪽, 아래 : 나머지 사각형의 유효한 타일링.
- 중간, 상단 : 중간 상태, 중간, 하단 : 나머지 사각형의 유효한 타일링.
- 오른쪽, 위쪽 : 오른쪽 상태, 오른쪽, 아래쪽 : 나머지 사각형의 유효한 타일링.
나머지 사각형의 타일링은 대신 근처의 이웃 타일로 타일링 할 수 있기 때문에 강제 되지 않지만 모든 주에서 게임 보드의 유효한 타일링이므로 타일 세트에서 그것들을 제거하고 정확하게 타일링 될 것이라고 가정합니다. 유효한 타일링이 있음을 알고 있으므로 수식이 만족스러운 경우 게임 보드의 타일링이 적어도 하나는 있어야합니다. 이러한 방식으로 타일링 될 것이라는 보장은 없지만 타일이 강제로 적용 된다는 보장 은 없습니다.( 1 ⋆ , 1 ⋆ )1⋆(1⋆,1⋆)
참고 : 이것에 만족하지 않거나 "타일링 가능"과 "타일링 강제"의 차이로 혼동되는 경우 , 같은 방식으로 가젯 주위에 벽을 놓을 수 있습니다. 우리는 가제트를 위해 벽을 만듭니다.3 × 23×23×2
이 가젯은 꼭 필요한 것은 아니기 때문에 닫히지 않았습니다. 타일 세트에서 제거 할 수있는 구성이 가능하기 때문에 필요하지 않습니다. 다른 구성을 수행 할 수도 있지만 이는 문제의 만족도에 영향을 미치지 않습니다.
다음 타일은 바둑판 식으로 배열됩니다 (따라서 타일 세트에서 제거 가능) : (1⋆,1⋆)
다음 타일은 바둑판 식으로 배열 될 수 있습니다 (따라서 타일 세트에서 제거 가능) : (1⋆,2⋆),(1⋆,3⋆)
이 가제트를 벽으로 닫으면 도 보장된다.(1⋆,2⋆),(1⋆,3⋆)
새로운 와이어 및 조항 게이트
흐르는 문제와 타일 세트를 비우기 때문에 와이어를 약간 다시 디자인해야합니다.
흐름 문제를 해결하는 한 가지 방법은 단순한 왼쪽 오른쪽 상태 대신 와이어를 회로로 만드는 것입니다. 즉, 선이 아닌 원형이므로 원의 윗부분을 오른쪽으로 밀면 아래쪽이 왼쪽으로 밀립니다. 이것은 흐름 문제를 해결합니다.
이 경로를 따라 와이어 및 절 게이트를 변경하여 두 문제를 모두 해결할 수 있습니다.
및 예약FTF
두 개의 새로운 범용 값인 와 소개하겠습니다 . 이 두 값은 보편적입니다. 정사각형 값 및 (규칙에 따라 을 벽의 빌딩 블록으로 예약 함 )과 같이 그리드의 실제 값 또는 선택한 값 그것들은 각각 참과 거짓을 나타냅니다.F 2 3 1TF231
우리는 다음과 같이 , , 강제 예약합니다 . 아래 그림, 왼쪽에서 오른쪽으로 설명 :( T , T ) ( F , F )(T,F)(T,T)(F,F)
- 우리는 를 로 사용하여 타일 을 강제하는 것과 동일한 체계를 사용합니다 . 여기의 각 및 는이 가젯에 고유합니다.T 1 ⋆ 2 ⋆ 3 ⋆(1⋆,1⋆)T1⋆2⋆3⋆
- 우리는 를 로 사용하여 타일 을 강제하는 것과 동일한 체계를 사용합니다. 각 및 는이 가젯에 고유합니다.F 1 ⋆ 2 ⋆ 3 ⋆(1⋆,1⋆)F1⋆2⋆3⋆
- 중앙에서 를 로 사용하여 타일 을 강제하는 것과 동일한 체계를 사용합니다. 사용 상향 압정의 다른 위치에. 이렇게하면 바둑판 식으로 배열됩니다. 및 는 로 타일링 할 수 있으므로 타일 세트에서 제거합니다. 여기의 각 및 는이 가젯에 고유합니다.F 1 ⋆ T ( F , T ) 2 ⋆ 3 ⋆ T 2 ⋆ 3 ⋆(1⋆,1⋆)F1⋆T(F,T)2⋆3⋆T2⋆3⋆
철사
각 와이어는 값으로 시작하고 끝나므로 . 이는 고유 한 와이어입니다. 와이어가 참여하는 각 절에 대해 와이어에는 두 개의 와이어 값 및 가 있으며 각 와이어마다 고유하며 동일한 절에 참여합니다. 왼쪽에서 오른쪽으로 설명과 함께 아래 그림.x ⋆ x ′ ⋆A⋆x⋆x′⋆
- 하나의 조항에 참여하는 와이어. 와이어의 높이는 이고 길이는 . 여기서 는 와이어가 참여하는 절 수입니다. 와이어는 왼쪽 에 두 개의 사각형으로 채워집니다. 오른쪽에 2 개. 물론 파란색 벽으로 표시된 모든면의 벽으로 둘러싸여 있습니다. 참고, 그 이 와이어에 고유 한, 오직 와이어에 사용되며 절은에 참여하고 있습니다.2 * p + 3 p A ⋆ 1 ⋆22∗p+3pA⋆1⋆
아래는 왼쪽에서 오른쪽으로 설명되는 두 가지 상태입니다.
- 실제 상태에서 한 절에 참여하는 와이어. 사각형이 사각형 과 쌍을 이루고 사각형이 사각형 과 쌍을 이루면 와이어가 참으로 간주됩니다 . 타일링이 반전 된 다른 상태에서는 거짓으로 간주됩니다. 타일을 선택한 후에는 타일링을 강제하는 방법에 유의하십시오 . 는 이미 먼저 강제 적용되므로 나머지 타일은 수평이어야합니다.T x ' ⋆ F A ⋆ ( T , F )x⋆Tx′⋆FA⋆(T,F)
- 거짓 상태의 동일한 와이어.
더 많은 조항에 참여할 경우 와이어가 참여하는 각 조항에 대해 한 쌍씩 더 많은 및 이 있습니다. 와 마찬가지로 위와 아래에 교대로 표시됩니다. 각 쌍 을 구분하는 및 제곱 .x ' ⋆ T F x ⋆ , x ′ ⋆x⋆x′⋆TFx⋆,x′⋆
두 개의 해당 상태.
이 가젯은 닫혀 있으므로 '흐름 문제'가 없습니다.
: 주 중 상태에서, 우리는 다음과 같은 타일을 수집하는 방법, 어떤 국가 중요하지 않습니다 , , .( A ⋆ , T ) ( A ⋆ , F )(A⋆,A⋆)(A⋆,T)(A⋆,F)
그러나 우리가 확신하지 못하는 타일이 있습니다. 한 상태에서 타일 세트에서 다른 상태에서는 타일 세트에서 실제로 제거 하시겠습니까? 정답은 다음과 같습니다. 절 게이트에는 동일한 문제가 있지만 반대 타일 세트가 있습니다. 다음 섹션에서 볼 수 있듯이 항상 나머지, 반대쪽 및 수집되지 않은 타일을 수집합니다. 이들 각각은 조항 게이트와 쌍을 이루므로 둘 다 제거 할 수 있습니다.( 1 ⋆ , F ) , ( 1 ' ⋆ , T ) , ( 2 ⋆ , F ) , ( 2 ′ ⋆ , T )(1⋆,T),(1′⋆,F),(2⋆,T),(2′⋆,F)...(1⋆,F),(1′⋆,T),(2⋆,F),(2′⋆,T)...
절
다음으로 새로운 조항 게이트의 첫 번째 반복을 만듭니다. 벽으로 둘러싸인 가젯으로 구성됩니다 . 가제트 안에서, 우리 는 상단 중앙에 하나의 를, 하단에 두 개의 사각형을 배치합니다; 하나는 왼쪽 아래에 있고 다른 하나는 오른쪽 아래에 있습니다. 나머지 사각형은 세 가지 다른 와이어의 와이어 변수를 나타내는 값입니다. 이것을 및 하겠습니다 . 와이어 변수 중 하나와 한 쌍의 강제 될 것이고, 나머지 와이어 변수는 페어링한다 값. 아래 그림, 왼쪽에서 오른쪽으로 설명합니다.F T a ⋆ , b ⋆ , c ⋆ F T2×3FTa⋆,b⋆,c⋆FT
- 왼쪽 : 새 조항 게이트의 첫 번째 반복에 대한 구성입니다.
- 오른쪽 타일링 의 세 가지 가능한 상태 .F
이 세 가지 상태는 세 가지 가능한 타일링으로 이어집니다. 아래 그림은 왼쪽에서 오른쪽으로 설명합니다.
- 왼쪽, 위 : 타일 왼쪽, 왼쪽, 아래 : 나머지 사각형 타일.F
- 가운데, 위 : 타일 오른쪽, 가운데, 아래 : 나머지 사각형 타일.F
- 오른쪽 위 : 아래로 바둑판 식으로 배열, 오른쪽 아래 : 나머지 사각형 타일링.F
는 절의 와이어 변수 중 하나와 쌍을 이루 므로 해당 와이어 변수는 더 이상 와이어의 와 쌍을 이룰 수 없습니다 . 따라서 와이어를 사실로 강제합니다. 반대로, 타일링하는 나머지 와이어 변수는 와이어 내에서 로 타일링해야합니다 . 이것은 절 과 정확히 동일한 제약 조건 입니다.F T F 1 -in- 3 - S TFF TF1-in-3-SAT
참고, 및 와이어 변수이다, 그러나 각각은 참조 있었다 또는 와이어 변수; 사용 본질적 와이어 변수를 무효화한다.c ⋆ x ⋆ x ′ ⋆ x ′ ⋆a⋆,b⋆,c⋆x⋆x′⋆x′⋆
한 가지 추가 사항 : 어떤 타일이 타일 세트에서 제거 될 수 있는지 알아야 할 의무를 없애려면 조항을 "이중 및 반대"해야합니다. 이것이 의미하는 바 는 및 의 부정을 나타내는 추가 변수 를 사용하여 또 다른 가젯 을 만드는 것 입니다. 이것을 및 하겠습니다 . 이는 및 의 부정 변수 변수 값 이어야합니다 . 이 가젯은 중앙에 가 있고 두 개가 다르다는 점에서 다릅니다.3×23a⋆,b⋆,c⋆a′⋆,b′⋆,c′⋆a⋆,b⋆,c⋆3×2TF모서리의 값; 지금까지 설명한 절 가젯과 정반대입니다. 이와 같은 절을 "배가"함으로써 위에서 설명한 가젯과 동일한 제약 조건을 다시 추가합니다. 그러나 를 타일 세트에서 각 변수에 대해 (따라서 및 역시 와이어 변수이므로). 왼쪽에서 오른쪽으로 설명합니다.(T,x⋆),(T,x′⋆),(F,x⋆),(F,x′⋆)a⋆,b⋆,c⋆
- "이중 및 반대"절. 하단 섹션은 위에서 설명한 절입니다. 상단 섹션은 새로 설명 된 상반된 조항입니다. 새 절은 논리적으로 동일한 제약 조건을 갖습니다. 그것은 최하위 조항의 반대이다. 이러한 결합 된 가제트와 와이어는 절에 참여하는 각 와이어 변수에 대해 타일 세트의 .(T,x⋆),(F,x⋆),(T,x′⋆),(F,x′⋆)
- 가장 왼쪽 그림 중간에있는 파란색 선은보기 쉽도록 표시되어 있습니다. 실제로는 더 이상 상태를 허용하지 않고 제거 할 수 있습니다.
예를 들어 모든 타일이 약속대로 방전되었음을 보여 드리겠습니다. 왼쪽에서 오른쪽으로 설명합니다.
- 단일 조항에 참여하는 와이어 그림. 절에 대한 상태가 선택됩니다. 여기서는 를 사용하는 반면 및 는이 절에서 다른 와이어 값을 나타냅니다.1⋆=b⋆a⋆b⋆
- 절에서 주어진 상태에 대해 값은 이웃하는 와 쌍을 이루어야합니다 .1⋆T
- 이로 인해 와이어가 실제 값으로 설정됩니다 (위의 설명에 따라 와이어의 양의 변수가 와 강제로 연결 되고 음의 변수가 와 강제 로 연결됨을 알 수 있습니다) ).TF
- 이로 인해 상반되는 절 (절의 상단 섹션)의 가 절의 와 쌍을 이룹니다 . 이제 와이어를 보면 와이어 내부의 모든 타일이 방전됩니다. 와이어 자체 또는 해당 절 가제트에서 방전됩니다. 이 상태에는 타일 , , , , , 및 입니다.1′⋆T(A⋆,A⋆)(A⋆,T)(A⋆,F)(1⋆,T)(1⋆,F)(1′⋆,F)(1′⋆,T)
다른 상태를 시도하면 왼쪽에서 오른쪽으로 아래 그림이 나타납니다.
- 이 절은 다른 두 가지 방법 중 하나로 타일링 입니다.(1⋆,T
- 따라서 는 와이어에 강제로 적용됩니다.(1⋆,F
- 와이어의 나머지 부분을 해당 타일로 연결하고 와이어를 false로 평가합니다.
- 마지막으로, 가제트의 반대 / 상위 섹션에서 는 가 철사. 이 상태에는 타일 , , , , , 및 입니다. 이것들은 다른 상태에서와 동일한 타일이 배출됩니다 .(1′⋆,F)(1′⋆,T)(A⋆,A⋆)(A⋆,T)(A⋆,F)(1⋆,T)(1⋆,F)(1′⋆,F)(1′⋆,T)
따라서 어느 상태에서든 동일한 타일을 방전합니다. 따라서, 만족스러운 할당이있는 경우 와이어 및 절이 함께 특정 타일을 성공적으로 방전합니다.
이 가젯은 닫혀 있으므로 흐름 문제가 없습니다.
와이어 가제트와 함께 절 가제트 는 항상 동일한 타일 쌍 값을 방출하도록 보장 하므로 타일링 방법을 모를 경우에도이를 방출 할 수 있습니다.
이제 모든 가제트가 기준을 충족합니다.
공식화
마지막 공식에서는 가로 행으로 구분 된 3 개의 가젯 행을 만듭니다.
- 바닥에는 두 개의 타일 높이 인 가제트를 놓습니다. 빌딩 블록과 와 조합을위한 강제 가제트가 필요합니다 . 우리는 강제 가제트를 서로 바로 옆에 배치합니다.TF
- 가운데 줄에는 와이어 가젯을 두 개의 타일 높이로 수평으로 배치합니다. 와이어 가젯은 수직 벽으로 서로 분리되어야합니다.
- 맨 윗줄에는 키가 4 개인 타일 가제트를 배치합니다. 조항 가젯은 수직 벽으로 서로 분리되어야합니다.
각 그림 위의 설명과 그림이 이어집니다. 전체 해상도를 보려면 이미지를 클릭하십시오. 이미지를 재생산 / 생성하는 소스 코드는 페이지 하단에 나열되어 있습니다.
수식 를 예로 사용하면 만족스러운 결과를 증인으로서 솔루션 .Φ(x)=(x1,¬x2,x3)∧(x2,¬x3,x4)∧(x1,x2,¬x4)(¬x1,x2,x3,¬x4)
먼저 가로 줄로 시작하여 가젯 행을 분리합니다. 우리는 사각형과 벽 내에서 타일을 붙인 쌍을 보여줍니다.
다음으로 가젯을 보여줍니다. 파란색 윤곽선은 가제트의 테두리를 나타냅니다. 강제 가제트는 벽으로 둘러싸이지 않기 때문에 파란색으로 파선으로 표시됩니다. 조항 가제트 중간에있는 선은 벽으로 둘러싸여 있지 않습니다. 보기 쉬움이 있습니다. 선을 제거해도 위에서 설명한 것처럼 더 이상 상태가 발생하지 않지만이 데모에서는 파란색 선이 표시됩니다. 참고 : 우리는 해당하는 경우 숫자 의미 가독성을 제공하기 위해 사각형 이름을 사용합니다. 각 이름은 숫자 값을 나타냅니다.
여기서 우리는 수직 벽을 채 웁니다.
여기서 우리는 증거 솔루션을 작성합니다. 즉, SAT 솔루션을 사용하여 생성하는 경우 타일링 솔루션입니다.
다음으로 필러 영역을 타일링합니다. 보드의 나머지 부분은 필요에 따라 크게, 까지는 타일까지 필요합니다. 따라서 타일 세트의 나머지 쌍을 방전합니다. 여기서 점선은 유효하지만 강제되지 않은 타일링을 나타냅니다. 이들을 타일링하는 다른 방법이있을 수 있습니다. 여기 왼쪽 하단을 보여줍니다.n
여기서 우리는 남은 사각형을 사소한 유효한 타일링으로 채 웁니다.
여기에 그리드의 오른쪽 하단 코너가 표시됩니다.
여기에 그리드의 오른쪽 상단이 표시됩니다. 수직 타일이 더 이상 맞지 않는 것에 주목하십시오. 필요한 경우 상단 행을 가로로 바둑판 식으로 배열합니다.
그리고 마지막으로 왼쪽 상단.
TeX를 통해 전체 게임 보드를 한 번에 생성하면 pdflatex의 메모리 부족 오류가 발생하므로 클립을 생성하고 함께 패치해야합니다. 노트북 뷰어 를 확인하십시오 .
TikZ 소스
게임 생성기 :