Ngói bàn cờ với triominoes bốn màu


11

Bài tập:

Hãy xem xét vấn đề: "đưa ra một bàn cờ bị thiếu một ô vuông, hãy cắt nó thành 21 L-triominoes". Có một bằng chứng xây dựng nổi tiếng rằng điều này có thể được thực hiện cho bất kỳ kích thước bàn cờ vuông nào là sức mạnh của hai. Nó hoạt động bằng cách chia bàn cờ thành một bàn cờ nhỏ hơn với lỗ trên đó và một triomino lớn và sau đó quan sát rằng triomino có thể được cắt thành bốn tam thức đệ quy.

Trong nhiệm vụ này, bạn được yêu cầu cắt một bàn cờ 8x8 thành các hình tam giác hình chữ L và sau đó tô màu chúng bằng bốn màu sao cho không có hai hình tam giác liền kề nào có cùng màu.

Sự chỉ rõ:

Đầu vào của bạn là vị trí của lỗ, được đưa ra dưới dạng một cặp số nguyên. Bạn có thể chọn cái nào là chỉ mục cột và cái nào là chỉ mục hàng. Bạn có thể chọn nếu mỗi điểm bắt đầu từ 0 hoặc 1 và cách góc tăng chúng. Bạn có thể yêu cầu A..H là tọa độ đầu tiên thay vì 0..7 hoặc 1..8. Bạn cũng có thể chấp nhận cả hai tọa độ được đóng gói thành một số nguyên duy nhất 0..63 hoặc 1..64 theo thứ tự từ điển (hàng chính hoặc cột chính, từ trái sang phải hoặc phải sang trái, lên xuống hoặc xuống lên). Bạn có thể viết một chương trình đầy đủ, hoặc một chức năng.

Bạn có thể xuất ra ốp lát dưới dạng ASCII, dưới dạng ASCII màu hoặc dưới dạng nguyên thủy đồ họa. Nếu bạn chọn đầu ra ASCII, bạn có thể chọn bất kỳ bốn ký tự ASCII có thể in nào để thể hiện bốn màu. Nếu bạn chọn ASCII được tô màu, bạn có thể chọn bất kỳ bốn ký tự ASCII có thể in hoặc chỉ một ký tự khác ngoài khoảng trắng. Các lỗ phải được đại diện bởi các nhân vật không gian. Nếu một trong các nhân vật của bạn là nhân vật không gian, không có triomino liền kề với lỗ hoặc ở cạnh bàn cờ có thể có màu này.

Nếu bạn chọn ASCII màu hoặc đầu ra đồ họa, bạn có thể chọn bốn màu bất kỳ trong số # 000, # 00F, # 0F0, # 0FF, # F00, # F0F, # FF0, #FFF hoặc các màu tương đương gần nhất có sẵn trong môi trường của bạn. Nếu bạn chọn đầu ra đồ họa, các nguyên thủy đồ họa của bạn phải được điền vào các ô vuông có kích thước tối thiểu 32x32 pixel và cách nhau không quá hai pixel màu khác. Nếu ở trên vượt quá độ phân giải màn hình của môi trường của bạn, yêu cầu kích thước tối thiểu được giảm xuống kích thước vuông lớn nhất vẫn vừa với màn hình.

Bạn có thể chọn bất kỳ ốp lát hợp lệ nào của bàn cờ đã cho. Bạn có thể chọn bất kỳ bốn màu của ốp lát bạn chọn. Lựa chọn bốn màu của bạn phải giống nhau trên tất cả các đầu ra, nhưng bạn không bắt buộc phải sử dụng mọi màu trong mỗi đầu ra.

Ví dụ:

Đầu ra có thể cho đầu vào = [0, 0] (góc trên cùng bên trái)

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

Một đầu ra có thể khác của cùng một chương trình (input = [0, 7]):

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

Một chương trình khác cũng có thể tạo ra, cho đầu vào của "D1" (lưu ý hướng bàn cờ không chuẩn nhưng được phép),

AABBCCAA
ACBACBAC
CCAABBCC
 ABBAADD
AABDABDC
BBDDBBCC
BABBACAA
AABAACCA

4
Nếu có đầu vào thì đó không phải là sự phức tạp của Kolmogorov
Jonathan Allan

@Jonathan ALLan mô tả thẻ sử dụng ai đó pokemon như một ví dụ về câu hỏi phức tạp kolmogorov có đầu vào. Tùy thuộc vào bạn nếu bạn muốn nén một bộ 64 giải pháp không đổi hoặc nếu bạn muốn thực hiện một quy trình để xếp bàn cờ và sau đó tô màu nó.
John Dvorak


1
Không đủ ba màu?
Arnauld

1
@Arnauld tôi sẽ cho phép điều đó. Tôi sẽ chỉnh sửa.
John Dvorak

Câu trả lời:


22

JavaScript (ES6),  184 ... 171  163 byte

(x)(y)0x70y7012

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)

Hãy thử trực tuyến!

phương pháp

4×4

(t0t1t2t3t4t5t6t7t8t9t10t11t12t13t14t15)

Mỗi triomino là một trong:

tri âm

Cấu hình ban đầu của ma trận như sau:

(3232132031021010)

Chúng tôi thay thế 2 màu đầu tiên giống như trên bất kỳ bàn cờ nào, điều này mang lại:

ma trận0

Các bước tiếp theo là:

  1. t5t6t9t10
  2. Chúng tôi xoay triomino trên đó đặt lỗ (có thể là cùng một triomino như trong bước # 1), để nó không che lỗ.
  3. Chúng tôi lấp đầy các lỗ bằng màu thứ 3 (trừ lỗ 'thực').

(3,0)

ma trận1

Và trong trường hợp đó, ma trận cuối cùng là:

(3132102031021010)

Đã bình luận

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

Đầu ra đồ họa

Click vào hình để đặt vị trí của lỗ.


Bằng chứng xây dựng rằng ba màu luôn luôn đủ, rất đẹp!
John Dvorak

6
Yêu đầu ra đồ họa có thể nhấp!
Kevin Cruijssen

3

Than , 78 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Đầu ra sử dụng các #$%ký tự. Giải trình:

NθNη

Nhập tọa độ của hình vuông trống.

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

Xuất ra một chuỗi nén. Nó chứa các dòng mới vì vậy để tránh phá vỡ dòng giải thích này, bạn sẽ tìm thấy chuỗi ở cuối câu trả lời.

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

Nếu một trong hai tọa độ lớn hơn 3thì hãy nhớ thực tế đó và trừ đi tọa độ từ 7.

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

Nhảy tới %ô vuông gần nhất bên trái của chữ %s và ghi đè lên nó bằng một #hoặc $nếu thích hợp. (Nhưng điều này sẽ bị ghi đè bởi khoảng trống nếu nó đã ở trong hình vuông này.)

Jθη Fζ‖Fε‖↓

Để trống hình vuông tại tọa độ giảm và sau đó phản ánh đầu ra khi cần thiết để đưa khoảng trống về vị trí ban đầu.

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

Tôi đã thử bắt đầu với hình vuông %s ở trung tâm và tìm đường đến tọa độ mong muốn nhưng mất 90 byte.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.