가장 작은 완벽한 제곱 광장을 인쇄하십시오


16

광장 제곱하는 유일한 사각형을 사용하여 사각형을 바둑판의 과정이다. 이 바둑판 식 배열은 크기가 다른 정사각형 만 사용하는 경우 완벽한 것으로 간주됩니다 . 가능한 가장 작은 완전 제곱 제곱 평방 (21 개) 다른 사각형을 사용하여 바둑판 식으로 배열 112x112 사이즈입니다.

아래에서이 사각형의 아스키 아트 버전을 만들었습니다.

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

제출 한 내용은 위의 사각형을 인쇄해야합니다. 원하는 경우 위 사각형의 반사 및 / 또는 회전을 인쇄 할 수 있습니다. 마지막 줄의 후행 줄 바꿈이 허용됩니다. 이것은 이므로 가장 작은 제출물이 이깁니다!


@Optimizer 질문과 Wikipedia에 따르면 모든 작은 사각형의 크기는 완전히 달라야합니다.
Level River St

Nathan, 제 규칙은 규칙에 따라 제출됩니까? 모든 선에 균일 한 두께를 사용했습니다.
DavidC

@DavidCarraher 정사각형의 각면에 윤곽이 그려져 있습니다 (그래서 내부면에는 여러 파운드 기호가 있습니다). 또한 #대신 사용해야 합니다X
Nathan Merrill

1
Nathan, 평면에서 가장자리는 경계가 아닙니다. 그것들은 1 차원 선분입니다. 두 개의 타일이 접하는 곳에는 두 줄이 아닌 한 줄이 표시되어야합니다. 그렇지 않으면, 우리는 타일 사이에 간격이 있다는 아이디어를 전달하고 있습니다.
DavidC

@DavidCarraher는 사실이지만 아스키로 표현하는 것이 더 합리적이라고 생각합니다.
Nathan Merrill

답변:


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 사각형으로 시작합니다. 이제 정사각형을 읽는 순서대로 (왼쪽에서 오른쪽으로, 위에서 아래로) 진행하십시오. 사용 가능한 첫 번째 위치에 각 사각형을 추가하십시오. 그 후, 완성 된 모든 선을 인쇄하십시오-그러면 다음 정사각형의 위치를 ​​알아 내기 위해 첫 번째 (남은) 선만 확인하면됩니다.

공백 p보다 큰 문자 코드를 가진 문자가 필요 하고 초기 격자 크기에 #고유 문자 코드 112를 재사용 할 수 있기 때문에 빈 격자는 s 로 초기화됩니다 . 나는 몇 가지의 사용했다 데니스의 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]]]]]

pic1


삭제하여 얻은이 렌더링을 선호합니다 Thickness[.015]

pic2


선 두께는 변하지 않으며, 50x50 정사각형은 가로 48 자, 아래 공백 48 자 #입니다. 오른쪽과 아래쪽의 다른 사각형과 맞 닿아 있으며 비슷한 방식으로 그려집니다. #바깥쪽에 모두 둥근 두 개의 사각형이 만나면 #안쪽 줄에 대해 두 배가 되고 사각형은 실제로 사각형이며 세로 및 가로로 같은 수의 문자가 있습니다. 문제는 글꼴입니다. 이 답변은 사양을 준수하지 않습니다. 수락 된 경우 질문이 객관적이지 않은 승리를 거둘 수 있습니다.
Level River St

선은 2 차원이 아닌 1 차원으로 생각됩니다. 그것들은 두께를 갖는 경계로 해석되어서는 안됩니다. 결국 사각형 영역을 사각형 하위 영역으로 분할합니다. 국경은 어떤 지역도 차지하지 않아야합니다.
DavidC

그게 좀 요점입니다. 선 은 사각형 사이 에 있으며 OP는 내부 테두리가있는 사각형을 나타내도록 선택했습니다. 그가 각 사각형에 대해 다른 기호를 사용하기로 선택했다면 (그리고 아마도 그것들을 채웠을 경우) 더 명확했을 것입니다. 어쨌든, 최근의 국기 질문에서 볼 수 있듯이, 일반적인 이해 (및 komolgorov 복잡성의 요점) 태그)는 OP가 제공하는 아스키 아트 표현을 충실히 재현하는 것이며, 귀하가 직접 해석하지는 않습니다. 흥미롭지 만 이것은 정답이 아닙니다. 많은 사각형은 여전히 ​​높이와 너비가 다른 문자 수를 갖습니다.
Level River St

Von Karman Streets
Beta Decay

3

루비, 180 바이트

아래의 ungolfed 버전을 기반으로 한 골프 버전. y왼쪽 위 모서리에 대해 동일한 좌표를 갖는 일반적으로 2 개 또는 3 개의 사각형이 있다는 사실을 이용합니다 .

첫 번째 매직 문자열에는 square sidelength+70및의 ASCII 코드가 포함 y 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

원본 버전

이 (완전하게 ungolfed) 솔루션은 불필요한 빈 줄과 들여 쓰기를 제외하고 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) ? ' ' : '#';
          }
        }
      }
    }
  }
}

이 작업은 112x112 바이트 (0으로 초기화 됨)의 배열을 통해 스캔하는 것입니다. 바이트가 0이 될 때마다 배열에서 값을 가져와 i해당 크기의 상자를 추가합니다. 각 행의 추가 바이트는 문자열 종결 자로 작동하므로 문자를 개별적으로 출력하는 puts()대신 전체 행을 출력 하는 데 사용할 수 있습니다 putchar().

이것은 아마도 조금 더 골프를 칠 수 있지만, 나는 그것이 steveverrill의 대답을 때릴 가능성이 높다고 생각하지 않습니다 .

(아이디어 링크)


+1 이것은 덜 골프적인 언어로, 나보다 훨씬 뛰어난 훌륭한 개념입니다. 나는 그것이 내 대답을 이길 수 있다고 생각합니다. 당신이를 인쇄해야합니다 #!(p%(n-1)&&q%(n-1))나는 또한 수 감소로 보일 것이다 for, 네 두에 루프를 사용하여 x=i%113와 y = i/113 etc.
Level River St

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. 고마워, 내가 놓친 명백한 것
MickyT

2

MS-DOS 이진, 137

다음 코드는 square.com이라는 파일에 파일을 쓰면 더 이상 컴파일 할 필요가 없지만 MS-DOS에서 실행됩니다 (그러나 16 진수로 제공되므로 먼저 "unhex"해야합니다).

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

항상 그렇듯이 매트릭스. 크기와 각 사각형 ans의 행과 열 인덱스를 하드 코딩했습니다. 나는 이것을 사용하여 큰 '공백'제곱을 채울 수 있습니다 #.

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

짧은 입력 ( 압축 gzip대신 사용 하지 않는 gzip -9)과 here-string 을 사용하는 힌트에 대한 Toby Speight 덕분 입니다.


여기에 2 줄 더 짧음 :base64 -d<<<H4sIAP9YuVUAA+3XQQrDIBAF0H1PUfD+d+yq0FA7GirGie/vdEZfkCy0lLl5lOfJlPaKoAUIBAKBQCAQCLwzOP3mfdFVv9IKBM4BTyQpGA0PE0AgcB8wzC3A6vS7egH4d5YH64WPtVGh/zvygj8agcCvQuufzA+2GoFA4AZgd9KCwS7Hzu3B7qQFO09rbXDEaa0NjtgLCAQCgUAgEAgEAoHz34dj8wLKvMUNbzEAAA==|gunzip
Toby Speight

그리고 더 짧은 입력은 우리를 251로 줄입니다 :base64 -d<<<H4sIADyFv1UCA+3ZOw6EMAwFwH5PgeT735EOUSyfQAgOmVeCxUgusAkRbfOLqTARd0qAQCAQCAQCgcAvg80375dW/T+lQGAbsCCdgvsdXl0AAoHjgM8e7mUA92bKG+DtpAevDPflRsko7BXcKAQCD9+X3wOPCoFA4ABgnZ/OmcHTS+bw4PXzkV7Ak93KDdboVm6wxrOAQCAQCAQCgUAgENj++7BuZsq8xQ1vMQAA|gunzip
Toby Speight

확실하게 작동합니까? 나는 단지 얻는다 gunzip: command not found. 서브 쉘을 사용하여 작동시킬 수는 (base64 -d|gunzip)<<<...있지만 여전히 258 바이트를 사용합니다.
user2845840

이상합니다, @ user284584-당신의 길에 이상한 것이 있습니까? 내가 쓴 내용을 테스트했습니다 (대화 형 셸에서 차이가 나는 경우)
Toby Speight

맙소사 ... 의견을 복사하여 다시 셸에 붙여 넣으십시오. Stackexchange는 "유용하게"6 개의 보이지 않는 문자, 각각 3 개의 u + 200c 및 u + 200b를 삽입했습니다. 그것들을 제거한 후에는 작동합니다.
user2845840
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.