打印出最小的完美平方平方


16

平方正方形是仅使用其他正方形平铺正方形的过程。如果此平铺仅使用不同大小的正方形,则认为它是完美的。在尽可能小的完美方方是一个112x112使用21个不同的正方形瓷砖广场。

我在下面创建了这个正方形的ascii艺术版本:

################################################################################################################
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ##                         #
#                                                ##                                 ############################
#                                                ##                                 ############################
#                                                ##                                 ##      ##                 #
#                                                ##                                 ##      ##                 #
#                                                ##                                 ##      ##                 #
#                                                ##                                 ##      ##                 #
#                                                ##                                 ##      ##                 #
#                                                ##                                 ##      ##                 #
#                                                #############################################                 #
#                                                #############################################                 #
#                                                ##             ##               ##         ##                 #
#                                                ##             ##               ##         ##                 #
#                                                ##             ##               ##         ##                 #
#                                                ##             ##               ##         ##                 #
#                                                ##             ##               ##         ##                 #
#                                                ##             ##               ##         ##                 #
#                                                ##             ##               ##         ##                 #
#                                                ##             ##               ##         ##                 #
#                                                ##             ##               ##         ##                 #
#                                                ##             ##               ###############################
#                                                ##             ##               ###############################
#                                                ##             ##               ##    ##                      #
#                                                ##             ##               ##    ##                      #
##################################################################               ##    ##                      #
##################################################################               ##    ##                      #
#                           ##                       ##       ###########################                      #
#                           ##                       ##       ###########################                      #
#                           ##                       ##       ##     ##                ##                      #
#                           ##                       ##       ##     ##                ##                      #
#                           ##                       ##       ##     ##                ##                      #
#                           ##                       ##       ##     ##                ##                      #
#                           ##                       ##       ##     ##                ##                      #
#                           ##                       ##################                ##                      #
#                           ##                       ##################                ##                      #
#                           ##                       ##              ##                ##                      #
#                           ##                       ##              ##                ##                      #
#                           ##                       ##              ##                ##                      #
#                           ##                       ##              ##                ##                      #
#                           ##                       ##              ##                ##                      #
#                           ##                       ##              ##                ##                      #
#                           ##                       ##              ##                ##                      #
#                           ##                       ##              ##                ##                      #
#                           ##                       ##              ##                ##                      #
#                           ##                       ##              ###########################################
#                           ##                       ##              ###########################################
#                           ##                       ##              ##                                        #
#                           ##                       ##              ##                                        #
#                           ##                       ##              ##                                        #
#                           ###########################################                                        #
#                           ###########################################                                        #
#                           ##  ##                                   ##                                        #
#                           ##  ##                                   ##                                        #
##################################                                   ##                                        #
##################################                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
#                               ##                                   ##                                        #
################################################################################################################

您的提交应打印出上面的方框。如果需要,您可以打印上述正方形的反射和/或旋转。允许在最后一行尾随换行符。这是一个,因此最小的提交将获胜!


@Optimizer根据问题和维基百科,所有小方块的大小必须完全不同。
水平河圣

内森,我的意见符合规定吗?我为所有线条使用了均匀的厚度。
DavidC 2015年

@DavidCarraher我在正方形的每一侧都有轮廓(因此内侧有多个井号)。此外,你需要使用#的,而不是X
弥敦道美林

1
内森(Nathan),在平面上,边缘不是边界。它们是一维线段。如果有两块瓷砖相邻,则应该看到一行,而不是两行。否则,我们传达的想法是,瓷砖之间存在间隙。
DavidC

@DavidCarraher的确如此,但我认为用ascii表示它更有意义。
内森·美林

Answers:


4

CJam,88 84 83字节

'p:Ci_C*a*"2#   *%!"{i_S*a*{3af.|W%z}4*1$0=C#C*f{\+}..e<{_C&{oNo}|}%}/

在这里测试。

说明

这是基本概念:以“空” 112x112正方形开始。现在按阅读顺序遍历方块(从左到右,从上到下)。将每个正方形添加到第一个可用位置。然后,打印所有已完成的行-这确保我们只需要检查第一(剩余)行即可确定下一个正方形所在的位置。

空网格初始化为ps,因为我需要一个字符代码大于空格和的字符#,并且因为我可以将其自己的字符代码重用112为初始网格的大小。我在这里利用了Dennis的ASCII艺术技巧,将小方块填充到网格中。

'p:C        e# Store the character 'p' in C.
i           e# Convert to its character code 112.
_C*a*       e# Generate a 112x112 array of p's.
"2#   *%!"  e# The 21 characters in this string correspond to the side lengths of
            e# the squares in the solution in reading order.
{           e# For each character in that string...
  i         e#   Convert to its character code (the current square's side length N).
  _S*a*     e#   Generate an NxN array of spaces.
  {         e#   Run this block 4 times. Each iteration turns the leading column into #'s
            e#   and then rotates the square by 90 degrees.
    3af.|   e#     For the first character in each row, take the bitwise OR with 3. 
            e#     This turns spaces into #'s and leaves #'s unchanged.
    W%z     e#     Reverse and transpose, which rotates by 90 degrees.
  }4*
  1$0=      e#   Copy the remaining grid and fetch the top row.
  C#        e#   Find the index of the first 'p'.
  C*        e#   Get a string of that many p's.
  f{\+}     e#   Prepend this string to each row of the small square, which gives the
            e#   square the correct horizontal position.
  ..e<      e#   Take the pairwise minimum of the square and the remaining grid. The p's
            e#   prepended to the square will leave the grid unchanged, but the spaces
            e#   and #'s in the square will overwrite the p's in the grid.
  {         e#   Map this block onto each row of the grid.
    _C&     e#     Copy the row and check if any p's are left.
    {oNo}|  e#     If NOT, the row is complete and we print it together with a newline.
            e#     This also removes the row from the grid, such that the top row for
            e#     the next iteration will have space for the next square left.
  }%
}/

9

数学360 426

该代码的工作方式是首先绘制正方形的理想正方形,对图像进行光栅化和二值化,然后将0转换为“#”,再将1转换为“”。

在表中以普通ASCII字符返回输出。

f@{n_,x_,y_}:=Rectangle[{x,y},{x+n,y+n}];t=Transpose;
Flatten[i=Rasterize[Graphics[{EdgeForm[{(*Thickness[.015],*)Black}],White,
f/@ Partition[{33,0,0,29,0,33,50,0,62,37,33,0,25,29,37,42,70,0,18,70,42,24,88,42,9,54,53,7,63,53,15,50,62,17,65,60,
11,82,66,19,93,66,35,50,77,27,85,85},3]
},ImageSize->70
],RasterSize->70]//Binarize//ImageData,1]/.{0:> "#",1:> " "};
GraphicsGrid@t@Most@Most@Rest@t[Most@Most[Rest[ArrayReshape[%,Dimensions[i]]]]]

图片1


我更喜欢通过删除获得的渲染图 Thickness[.015]

图片2


线的粗细没有变化,50x50的正方形为48个空格字符,下为48个空格字符,边框为#。它与右侧和底部的其他正方形相接,它们以类似的方式绘制。因此,如果两个正方形#的外部都相交,那么您会得到一个双倍#的内部线,这些正方形的确是正方形,它们在垂直和水平方向上的字符数相同,问题是字体。该答案不符合规范。如果被接受,则该问题将被投票否决非客观的胜利。
级圣河

这些线被认为是一维的,而不是二维的。它们不应被解释为具有厚度的边界。毕竟,我们将一个正方形区域划分为多个正方形子区域。边界不应占据任何区域。
DavidC

这就是重点。这些线位于正方形之间,OP选择使用内部边界表示正方形。如果他选择为每个正方形使用一个不同的符号(可能还会填充它们),可能会更加清楚。无论如何,从最近的标志问题,通常的理解(以及komolgorov复杂性的整个观点)可以看出标签)是为了忠实地复制OP提供的Ascii艺术作品,而不是您自己进行解释。尽管很有趣,但这不是一个有效的答案。许多正方形的高度和宽度仍然具有不同数量的字符。
级圣河

让我想起了冯·卡曼街(Von Karman Streets
-Beta Decay,

3

Ruby,180个字节

高尔夫版本基于以下非高尔夫版本。我们利用以下事实:y左上角通常有2或3个具有相同坐标的正方形。

第一个魔术字符串包含了ASCII码square sidelength+70y increment +40。当遇到正方形边长(Ascii代码> 67)时,我们假设下一个正方形在相同的y坐标上,并且可以通过将当前x坐标增加来获得x坐标sidelength+2。当遇到ay增量(Ascii代码<67)时,我们将相应地增加y坐标,并将x坐标重置为第二个魔术字符串中编码的数字。

a=Array.new(112){?#*112}
x=y=1
j=9
'vg_CLW0SUO3J\,a]M*KV/T3n-Hi,e'.each_byte{|i|i>67?(s=i-70;(y..y+s-1).map{|i|a[i][x,s]=" "*s};x+=s+2):(x=')Fo_h){[~'[j-=1].ord-40;y+=i-40)}
puts a

原始版本

此(完全取消引用)解决方案包含315个字节,不包括不必要的空行和缩进。它仅创建112个112的字符串数组,#然后用空格替换正方形的内部。

$a=Array.new(112){"#"*112}
def f(x,y,s)
  (y..y+s-1).map{|i|$a[i][x,s]=" "*s}
end

f(1,1,48)
f(51,1,33)
f(86,1,25)

f(86,28,6)
f(94,28,17)

f(51,36,13)
f(66,36,15)
f(83,36,9)

f(83,47,4)
f(89,47,22)

f(1,51,27)
f(30,51,23)
f(55,51,7)

f(64,53,5)
f(71,53,16)

f(55,60,14)

f(71,71,40)

f(30,76,2)
f(34,76,35)

f(1,80,31)

puts $a

3

C,198字节

char*i="bSK8C?A;6HMI927B@Z4UQ",o[112][113],x,y,p,q,n;main(){for(;y<112;puts(o[y]),y++)for(x=-1;++x<112;)if(!o[y][x]){n=*i++-48;for(p=-1;++p<n;)for(q=-1;++q<n;)o[q+y][p+x]=p&&n-1-p&&q&&n-1-q?32:35;}}

(无高尔夫球)

char *i="bSK8C?A;6HMI927B@Z4UQ", o[112][113], x, y, p, q, n;
main() {
  for ( ; y<112; puts(o[y]),y++) {
    for (x=-1; ++x<112; ) {
      if (!o[y][x]) {
        n = *i++ - 48;
        for (p=-1; ++p<n; ) {
          for(q=-1; ++q<n; ) {
            o[q+y][p+x] = (p && n-1-p && q && n-1-q) ? ' ' : '#';
          }
        }
      }
    }
  }
}

这一切都是通过扫描112×112字节(初始化为零)的数组进行的。每当遇到零字节时,它都会从数组中获取一个值i并添加一个具有相应大小的框。每行中的额外字节充当字符串终止符,因此我们可以puts()用来输出整行,而不是putchar()用来单独输出字符。

这也许可以打更多一点,但是我认为击败Steveverrill的答案的机会不大

(ideone链接)


+1这是一个极好的概念,用一种不太喜欢打高尔夫球的语言,比我的要好得多。我相信它也许能胜过我的答案。请注意,#!(p%(n-1)&&q%(n-1))我还希望for使用x=i%113和y = 将循环数从四个减少到两个时,需要打印a i/113 etc
级圣河

3

R,293个 291 287 282字节

a=array('#',112:113)
a[,113]='
'
for(g in list(c(0,0,49,34,26),c(27,85,7,18),c(35,50,14,16,10),c(46,82,5,23),c(50,0,28,24,8,1),c(52,63,6,17),c(59,54,15),c(70,70,41),c(75,29,3,36),c(79,0,32))){y=g[1];x=g[2]
for(b in g[0:1-2]){a[(y+2):(y+b),(x+2):(x+b)]=' '
x=x+b+1}}
cat(t(a),sep='')

完成此操作后,我意识到我完成了与@steveverrill几乎相同的过程。数组“#”,使方形内部空白。可以从中挤出更多。第三行的回车很重要。感谢AlexA的帮助。


您只引用s一次,所以您不能做for(g in list(...))而不是s事先单独指定吗?我认为这样可以节省2-3个字节。
Alex A.

@AlexA。谢谢,我完全想念的一个明显
证据

2

MS-DOS二进制文件,137

如果将以下代码写入一个名为square.com的文件中,则它将在MS-DOS中运行,无需进一步编译(但是由于它是以十六进制形式给出的,因此您需要先对其进行“取消十六进制”处理):

fcba8f01b82370e83000bd1400bb4d018b1743438a27b02043e81e004d75
f1b97000ba8f3289d7b00daab00aaab82409aa83ea70cd214975ecc331c9
88e189ce89d788e1f3aa83c2704e75f4c3201d30e223218527190524063d
1f11521d0d811c0f321f09921c04b8141670101b4d12176619076f1905a6
141066120e4602288d100221022300021f

在大多数终端中,输出将无法识别,但是您可以将其重定向到文件(square.com > output.txt),并在文本编辑器中查看它。如果您想让内容更具可读性,则将以下代码放入debug.exe(debug.exe < square.asm)将产生一个可运行的square.com :

a
cld
mov dx,18f
mov ax,7023
call 13a
mov bp,14
mov bx,14d
mov dx,[bx]
inc bx
inc bx
mov ah,[bx]
mov al,20
inc bx
call 13a
dec bp
jnz 110
mov cx,70
mov dx,328f
mov di,dx
mov al,d
stosb
mov al,a
stosb
mov ax,924
stosb
sub dx,70
int 21
dec cx
jnz 125
ret
xor cx,cx
mov cl,ah
mov si,cx
mov di,dx
mov cl,ah
rep stosb
add dx,70
dec si
jnz 140
ret
db 20,1d,30,e2,23,21
db 85,27,19,05,24,6
db 3d,1f,11,52,1d,d
db 81,1c,f,32,1f,9
db 92,1c,4,b8,14,16
db 70,10,1b,4d,12,17
db 66,19,7,6f,19,5
db a6,14,10,66,12,e
db 46,02,28,8d,10,2
db 21,02,23,00,02,1f

n square.com
rcx
89
w
q

1

Matlab /八度,258

与往常一样,矩阵。我对每个正方形的行和列索引以及其大小进行了硬编码。我可以用它们填充#s 的大“空白”平方。

r=[2,2,2,29,29,37,37,37,48,48,52,52,52,54,54,61,72,77,77,81];
c=[2,52,87,87,95,52,67,84,84,90,2,31,56,65,72,56,72,31,35,2];
s=[47,32,24,5,16,12,14,8,3,21,26,22,6,4,15,13,39,1,34,30];
z=ones(112)*35;
for i=1:20;
    z(r(i)+(0:s(i)),c(i)+(0:s(i)))=32;
end;disp([z,''])

0

巴什(252)

每个编解码器都应该能够击败通用压缩算法:

base64 -d<<<H4sIADyFv1UCA+3ZOw6EMAwFwH5PgeT735EOUSyfQAgOmVeCxUgusAkRbfOLqTARd0qAQCAQCAQCgcAvg80375dW/T+lQGAbsCCdgvsdXl0AAoHjgM8e7mUA92bKG+DtpAevDPflRsko7BXcKAQCD9+X3wOPCoFA4ABgnZ/OmcHTS+bw4PXzkV7Ak93KDdboVm6wxrOAQCAQCAQCgUAgENj++7BuZsq8xQ1vMQAA|gunzip

感谢Toby Speight提供了使用较短输入(gzip不是gzip -9用于压缩,而是用于转换)和此处字符串的提示。


2短,带有以下字符串:base64 -d<<<H4sIAP9YuVUAA+3XQQrDIBAF0H1PUfD+d+yq0FA7GirGie/vdEZfkCy0lLl5lOfJlPaKoAUIBAKBQCAQCLwzOP3mfdFVv9IKBM4BTyQpGA0PE0AgcB8wzC3A6vS7egH4d5YH64WPtVGh/zvygj8agcCvQuufzA+2GoFA4AZgd9KCwS7Hzu3B7qQFO09rbXDEaa0NjtgLCAQCgUAgEAgEAoHz34dj8wLKvMUNbzEAAA==|gunzip
Toby Speight 2015年

较短的输入使我们下降到251base64 -d<<<H4sIADyFv1UCA+3ZOw6EMAwFwH5PgeT735EOUSyfQAgOmVeCxUgusAkRbfOLqTARd0qAQCAQCAQCgcAvg80375dW/T+lQGAbsCCdgvsdXl0AAoHjgM8e7mUA92bKG+DtpAevDPflRsko7BXcKAQCD9+X3wOPCoFA4ABgnZ/OmcHTS+bw4PXzkV7Ak93KDdboVm6wxrOAQCAQCAQCgUAgENj++7BuZsq8xQ1vMQAA|gunzip
Toby Speight 2015年

您确定可行吗?我只有gunzip: command not found。我可以使用subshel​​l:使其工作(base64 -d|gunzip)<<<...,但是仍然使用258字节。
user2845840

奇怪,@ user284584-您的路径有些奇怪?我测试了我写的内容(在交互式外壳中,如果有区别的话)
Toby Speight 2015年

哦,天哪...请尝试复制您的评论,然后将其粘贴回外壳中。Stackexchange“有帮助地”插入了6个不可见字符,u + 200c和u + 200b每个3个。删除它们后,它可以工作。
user2845840
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.