用四色的三聚氰胺平铺棋盘


12

任务:

考虑一下问题:“给一个棋盘一个正方形不见了的棋子,切成21个L-三聚氰胺”。有一个众所周知的建设性证明,即可以对任何大小为2的幂的方形棋盘进行此操作。它的工作原理是将棋盘分割成一个较小的棋盘,棋盘上有一个孔和一个大的Triomino,然后观察该Triomino可以递归地切成四个Triomino。

在此任务中,您需要将8x8棋盘切成L形的三角骨,然后用四种颜色着色,以使两个相邻的三角骨都不具有相同的颜色。

规格:

您输入的是孔的位置,以一对整数形式给出。您可以选择哪一个是列索引,哪个是行索引。您可以选择是从0还是从1开始,然后从哪个角开始增加。您可能需要A..H作为第一个坐标,而不是0..7或1..8。您也可以接受按字典顺序打包成单个整数0..63或1..64(行主要或列主要,从左到右或从右到左,从上到下或从上到下)的两个坐标。您可以编写完整的程序或函数。

您可以将图块输出为ASCII,彩色ASCII或图形图元。如果选择ASCII输出,则可以选择任何四个可打印的ASCII字符来表示四种颜色。如果选择彩色ASCII,则可以选择任何四个可打印ASCII字符,或者仅选择一个空格以外的字符。孔必须用空格字符表示。如果您的角色之一是空格字符,则靠近该孔或棋chess边缘的三聚氰胺可能不是这种颜色。

如果选择彩色ASCII或图形输出,则可以从环境中可用的#000,#00F,#0F0,#0FF,#F00,#F0F,#FF0,#FFF中选择任意四种颜色。如果选择图形输出,则您的图形基元必须以至少32x32像素的正方形填充,并以不超过两个其他颜色的像素分隔。如果以上超出您的环境的屏幕分辨率,则将最小尺寸要求放宽到仍然适合屏幕的最大正方形尺寸。

您可以选择给定棋盘的任何有效平铺。您可以选择任意四种平铺颜色。您在所有输出中选择的四种颜色必须相同,但是并不需要在每个输出中使用每种颜色。

例子:

输入的可能输出= [0,0](左上角)

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

同一程序的另一个可能的输出(输入= [0,7]):

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

对于输入“ D1”(注意非标准但允许的棋盘方向),也可能会产生不同的程序,

AABBCCAA
ACBACBAC
CCAABBCC
 ABBAADD
AABDABDC
BBDDBBCC
BABBACAA
AABAACCA

4
如果有输入的话,这并不是真正的Kolmogorov复杂性
乔纳森·艾伦,

@JonathanAllan标记说明使用那个口袋妖怪作为输入的kolmogorov复杂性问题的示例。如果要压缩一组64个常数解,或者要实现一个过程以平整棋盘然后为其着色,则取决于您。
约翰·德沃夏克


1
三种颜色不够吗?
阿纳尔德

1
@Arnauld我会允许的。我会编辑。
约翰·德沃夏克

Answers:


22

JavaScript(ES6), 184 ...  171163 字节

(x)(y)0X70ÿ701个2

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

Ť0Ť1个Ť2Ť3Ť4Ť5Ť6Ť7Ť8Ť9Ť10Ť11Ť12Ť13Ť14Ť15

每个triomino是以下之一:

三氨基

矩阵的初始配置如下:

32321个32031个021个01个0

就像在任何棋盘上一样,我们交替使用前两种颜色,从而得到:

矩阵0

下一步是:

  1. Ť5Ť6Ť9Ť10
  2. 我们旋转孔所在的Triomino(它可能与步骤1中的Triomino相同),以便它不覆盖孔。
  3. 我们用第三种颜色填充孔(“真实”孔除外)。

30

矩阵1

在这种情况下,最终矩阵为:

31个321个02031个021个01个0

已评论

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

图形输出

单击图片以设置孔的位置。


三种颜色总是足够的建设性证明,非常好!
约翰·德沃夏克

6
喜欢可点击的图形输出!
凯文·克鲁伊森

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⊕÷θ²⊕÷粧#$⁺ⅈⅉ

跳到s %左上角正方形的最接近的位置,%并用#$适当地覆盖它。(但是,如果此空格中已有空格,它将被空格覆盖。)

Jθη Fζ‖Fε‖↓

在缩小的坐标处将正方形空白,然后根据需要反射输出以使空白恢复到原始位置。

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

我尝试从%中心的s 平方开始,一直到所需的坐标,但是这花了90个字节。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.