4 색 트리오 미노로 체스 판을 타일링


12

직무:

문제는 "한 정사각형이없는 체스 판을주고 21 개의 L- 트리오 미노스로 자른다"는 것입니다. 이것이 2의 거듭 제곱 체스 판 크기에 대해 수행 될 수 있다는 잘 알려진 구조적 증거가 있습니다. 그것은 체스 판을 구멍과 하나의 큰 triomino가있는 작은 체스 판으로 나누고 그 triomino가 재귀 적으로 4 개의 triominoes로 절단 될 수 있음을 관찰함으로써 작동합니다.

이 작업에서는 8x8 체스 판을 L 모양의 트리오 미노로 자른 다음 인접한 두 트리노 미노가 동일한 색상을 갖지 않도록 4 가지 색상으로 채색해야합니다.

사양:

입력은 정수 쌍으로 제공되는 구멍의 위치입니다. 열 인덱스 중 하나와 행 인덱스 중 하나를 선택할 수 있습니다. 각각이 0에서 시작하여 1에서 시작하여 어느 구석에서 증가하는지 선택할 수 있습니다. 0..7 또는 1..8 대신 첫 번째 좌표로 A..H가 필요할 수 있습니다. 사전 식 순서로 단일 정수 0..63 또는 1..64로 압축 된 두 좌표를 허용 할 수도 있습니다 (행-주 또는 열-주, 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽, 위 아래 또는 아래에서 위). 전체 프로그램 또는 함수를 작성할 수 있습니다.

타일링을 ASCII, 컬러 ASCII 또는 그래픽 프리미티브로 출력 할 수 있습니다. ASCII 출력을 선택하면 4 개의 색상을 나타 내기 위해 인쇄 가능한 4 개의 ASCII 문자를 선택할 수 있습니다. 컬러 ASCII를 선택하면 인쇄 가능한 ASCII 문자 4 개 또는 공백 이외의 문자 하나만 선택할 수 있습니다. 구멍은 공백 문자로 표시해야합니다. 캐릭터 중 하나가 공백 문자 인 경우 구멍이나 체스 판 가장자리에 인접한 트리오 미노는이 색상이 아닐 수 있습니다.

컬러 ASCII 또는 그래픽 출력을 선택하는 경우 # 000, # 00F, # 0F0, # 0FF, # F00, # F0F, # FF0, #FFF 또는 사용자 환경에서 사용 가능한 가장 가까운 색상 중에서 4 가지 색상을 선택할 수 있습니다. 그래픽 출력을 선택하는 경우 그래픽 프리미티브는 최소 32x32 픽셀 크기의 정사각형으로 채워지고 다른 색상의 픽셀 2 개 이상으로 분리되어야합니다. 위의 내용이 사용자 환경의 화면 해상도를 초과하면 최소 크기 요구 사항이 여전히 화면에 맞는 가장 큰 정사각형 크기로 완화됩니다.

주어진 체스 판의 유효한 타일을 선택할 수 있습니다. 선택한 타일의 4 가지 색상을 선택할 수 있습니다. 모든 출력에서 ​​4 가지 색상을 선택해야하지만 모든 출력에 모든 색상을 사용할 필요는 없습니다.

예 :

입력 가능한 출력 = [0, 0] (왼쪽 상단)

 #??##??
##.?#..?
?..#??.#
??##.?##
##?..#??
#.??##.?
?..#?..#
??##??##

동일한 프로그램의 또 다른 가능한 출력 (입력 = [0, 7]) :

??#??#?
?##?##??
..xx..xx
.?x#.?x#
??##??##
..xx..xx
.?x#.?x#
??##??##

"D1"의 입력을 위해 다른 프로그램이 생성 될 수도 있습니다 (비표준이지만 체스 판 방향이 허용됨).

AABBCCAA
ACBACBAC
CCAABBCC
 ABBAADD
AABDABDC
BBDDBBCC
BABBACAA
AABAACCA

4
입력이 있다면 그것은 실제로 Kolmogorov의 복잡성이 아닙니다
Jonathan Allan

@JonathanAllan 태그 설명 은 입력을 취하는 kolmogorov 복잡성 질문의 예로 그 포켓몬 을 사용합니다. 64 개의 일정한 솔루션 세트를 압축하거나 체스 판을 타일링 한 다음 색상을 지정하는 절차를 구현하려는 경우 전적으로 귀하에게 달려 있습니다.
John Dvorak '


1
세 가지 색상이 충분하지 않습니까?
Arnauld

1
@Arnauld 나는 그것을 허용합니다. 편집하겠습니다.
John Dvorak '

답변:


22

자바 스크립트 (ES6),  184 ...  171163 바이트

(x)(y)0엑스70와이7012

h=>v=>(a=[...'3232132031021010'],a[5+(v&4|h>3)]^=3,a[v/2<<2|h/2]=v%2*2+h%2,g=x=>y&8?'':(x<8?x-h|y-v?a[y/2<<2|x/2]^y%2*2+x%2?(x^y)&2:1:' ':`
`)+g(-~x%9||!++y))(y=0)

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

방법

4×4

(012456789101112131415)

각 트리오 미노는 다음 중 하나입니다.

트리오 미노

매트릭스의 초기 구성은 다음과 같습니다.

(221201021010)

우리는 체스 판에서와 마찬가지로 처음 두 가지 색상을 번갈아 가며 다음과 같은 결과를 얻습니다.

행렬 0

다음 단계는 다음과 같습니다.

  1. 56910
  2. 구멍이 위치한 트리오 미노를 회전시켜 (1 단계에서와 동일한 트리오 미노 일 수 있음) 구멍을 덮지 않습니다.
  3. 구멍을 3 색으로 채 웁니다 ( '실제'구멍 제외).

(,0)

매트릭스 1

그리고 그 경우 최종 행렬은 다음과 같습니다.

(1210201021010)

댓글

h => v => (                       // (h, v) = hole coordinates
  a = [...'3232132031021010'],    // a[] = flat representation of the 4x4 matrix
  a[5 + (v & 4 | h > 3)] ^= 3,    // first rotation, achieved by XOR'ing with 3
  a[v / 2 << 2 | h / 2] =         // second rotation according to the
    v % 2 * 2 + h % 2,            // position of the hole within the triomino's square
  g = x =>                        // g is a recursive function that converts the 4x4
                                  // matrix into a 8x8 ASCII art
    y & 8 ?                       // if y = 8:
      ''                          //   stop recursion and return an empty string
    :                             // else:
      ( x < 8 ?                   //   if this is not the end of the row:
          x - h | y - v ?         //     if this is not the position of the hole:
            a[y / 2 << 2 | x / 2] //       if this part of the triomino located at this
            ^ y % 2 * 2 + x % 2 ? //       position is 'solid':
              (x ^ y) & 2         //         use either color #0 or color #2
            :                     //       else:
              1                   //         use color #1
          :                       //     else:
            ' '                   //       the hole is represented with a space
        :                         //   else:
          `\n`                    //     append a linefeed
      ) + g(-~x % 9 || !++y)      //   append the result of a recursive call
)(y = 0)                          // initial call to g with x = y = 0

그래픽 출력

구멍의 위치를 ​​설정하려면 그림을 클릭하십시오.


세 가지 색상이 항상 충분하다는 건설적인 증거, 매우 훌륭합니다!
John Dvorak '

6
클릭 가능한 그래픽 출력을 좋아하십시오!
Kevin Cruijssen '

3

, 78 바이트

NθNη”{⊞⊟¦≦⁶q×fΣ\⊙t×_⊟✳-Y⁴℅=⁶υ”≔›θ³ζ≔›η³εFζ≦⁻⁷θFε≦⁻⁷ηJ⊕÷θ²⊕÷粧#$⁺ⅈⅉJθη Fζ‖Fε‖↓

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. #$%문자를 사용하여 출력 합니다. 설명:

NθNη

빈 사각형의 좌표를 입력하십시오.

”{⊞⊟¦≦⁶q×fΣ\⊙t×_⊟✳-Y⁴℅=⁶υ”

압축 문자열을 출력합니다. 여기에는 줄 바꿈이 포함되어 있으므로이 설명의 흐름을 깨뜨리지 않도록 답변 끝에 문자열을 찾을 수 있습니다.

≔›θ³ζ≔›η³εFζ≦⁻⁷θFε≦⁻⁷η

둘 중 하나의 좌표가 그보다 큰 경우 3해당 사실을 기억하고 좌표를 7에서 빼십시오.

J⊕÷θ²⊕÷粧#$⁺ⅈⅉ

%왼쪽 상단의 정사각형의 가장 가까운 곳 으로 이동하여 또는 적절하게 %또는를 덮어 씁니다 . (그러나 이미이 사각형 안에 있으면 공백으로 덮어 쓰게됩니다.)#$

Jθη Fζ‖Fε‖↓

축소 된 좌표에서 정사각형을 비운 다음 블랭크를 원래 위치로 가져 오는 데 필요한대로 출력을 반영합니다.

##$$##$$
#%%$#%%$
$%%#$$%#
$$##%$##
##$%%#$$
#%$$##%$
$%%#$%%#
$$##$$##

나는 %중심에서 s 의 제곱으로 시작 하여 원하는 좌표로 나 가려고했지만 90 바이트가 걸렸습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.