最小の完璧な二乗正方形を印刷する


16

広場を二乗することだけで、他の正方形を使用して、正方形のタイル張りのプロセスです。このタイリングが異なるサイズの正方形のみを使用する場合、完全であると見なされます。可能な限り最小二乗完璧な正方形は 21種類の正方形を使用して、タイル112x112の正方形です。

この正方形のアスキーアート版を以下に作成しました。

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

提出すると、上記の正方形が印刷されます。必要に応じて、上記の正方形の反射や回転を印刷できます。最後の行の末尾の改行が許可されます。これはので、最小の提出が勝ちです!


@Optimizer質問とウィキペディアによると、すべての小さな正方形は完全に異なるサイズでなければなりません。
レベル川セント

ネイサン、私の提出はルールに従っていますか?すべての線に均一な太さを使用しました。
DavidC

@DavidCarraher正方形の各辺の輪郭が描かれています(内側には複数のポンド記号があります)。また、#代わりに使用する必要がありますX
ネイサンメリル

1
ネイサン、飛行機では、エッジは境界線ではありません。それらは1次元の線分です。2つのタイルが隣接する場合、2つではなく1つの行が表示されます。それ以外の場合は、タイル間にギャップがあるという考えを伝えています。
DavidC

@DavidCarraherそれは事実ですが、このようにアスキーで表現する方が理にかなっていると思います。
ネイサンメリル

回答:


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を再利用できるためです。ここでは、グリッドに小さな正方形を埋めるために、デニスの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

Mathematica 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文字で、境界線は#'sです。同様に描かれている右と下の他の正方形に突き当たります。#すべてが外側を回っている2つの正方形が交わる場所では、したがって#内側の線が2倍になります。また、正方形は実際には正方形であり、垂直と水平の文字数が同じです。問題はフォントです。この回答は仕様に準拠していません。受け入れられた場合、質問は非客観的な勝利のために投票されます。
レベルリバーセント

線は二次元ではなく一次元として考えられています。それらは、太さのある境界として解釈されるべきではありません。結局、正方形の領域を正方形のサブ領域に分割しています。境界線が面積を占めることはありません。
DavidC

それはちょっとポイントです。線は正方形の間を通り、OPは内部境界線を持つ正方形を表すことを選択しました。彼が各正方形に異なるシンボルを使用することを選択した場合(そしておそらくそれらを塗りつぶした場合)、より明確になったかもしれません。いずれの場合でも、最近の旗の質問、通常の理解(およびkomolgorov複雑性の全ポイントタグ)は、OPが提供するアスキーアート表現を忠実に再現するものであり、独自の解釈を行うものではありません。興味深いことですが、これは有効な答えではありません。多くの正方形では、高さと幅の文字数がまだ異なります。
レベルリバーセント

フォンカルマンストリート
ベータ崩壊

3

ルビー、180バイト

以下の非ゴルフバージョンに基づいたゴルフバージョン。通常y、左上隅に同じ座標を持つ2つまたは3つの正方形があるという事実を利用します。

最初のマジックストリングには、square sidelength+70およびのASCIIコードが含まれますy increment +40。正方形の辺の長さ(Asciiコード> 67)に遭遇した場合、次の正方形は同じy座標にあり、x座標は現在のx座標をでインクリメントすることで取得できますsidelength+2。y増分(Asciiコード<67)が発生すると、それに応じてy座標を増分し、x座標を2番目のマジックストリングでエンコードされた数字にリセットします。

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 x 112バイトの配列(ゼロに初期化された)をスキャンするだけです。ゼロバイトが検出されるたびに、配列から値を取得しi、対応するサイズのボックスを追加します。各行の余分なバイトは文字列ターミネーターとして機能するため、文字を個別に出力するputs()代わりに、行全体を出力できますputchar()

これはおそらくもう少しゴルフすることができますが、ステベバーリルの答えを打つ可能性はあまりないと思います

(理想的なリンク)


+1これは優れたコンセプトであり、私のゴルフ場よりもはるかに優れており、ゴルフの言語ではありません。私の答えを打ち負かすことができるかもしれないと信じています。and を使用してループの数を4から2 に減らすことを検討する#とき!(p%(n-1)&&q%(n-1))にaを出力する必要があることに注意してください。forx=i%113i/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とほぼ同じプロセスを実行したことに気付きました。'#'の配列で、正方形の内部を空白にします。おそらくこれをさらに絞ることができます。3行目の改行は重要です。いくつかのAlexAに感謝します。


s一度だけ参照するので、事前に個別にfor(g in list(...))指定するのではなく、できませんsか?それで2〜3バイト節約できると思います。
アレックスA.

@AlexA。ありがとう、私が完全に逃した明白なもの
-MickyT

2

MS-DOSバイナリ、137

次のコードは、square.comというファイルに書き込むとMS-DOSで実行され、それ以上のコンパイルは不要です(ただし、16進数で指定されているため、最初に「非16進数」にする必要があります)。

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 / Octave、258

いつものように、マトリックス。各正方形の行と列のインデックスとサイズをハードコーディングしました。これらを使用して、大きな「空白」の正方形を埋めることができます#

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

すべてのcodegolferは、汎用の圧縮アルゴリズムに打ち勝つことができるはずです。

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

短い入力(圧縮のgzip代わりに愚かな私を使用gzip -9)とhere-string を使用するためのヒントをくれたToby Speightに感謝します。


here-stringで2短縮:base64 -d<<<H4sIAP9YuVUAA+3XQQrDIBAF0H1PUfD+d+yq0FA7GirGie/vdEZfkCy0lLl5lOfJlPaKoAUIBAKBQCAQCLwzOP3mfdFVv9IKBM4BTyQpGA0PE0AgcB8wzC3A6vS7egH4d5YH64WPtVGh/zvygj8agcCvQuufzA+2GoFA4AZgd9KCwS7Hzu3B7qQFO09rbXDEaa0NjtgLCAQCgUAgEAgEAoHz34dj8wLKvMUNbzEAAA==|gunzip
トビースパイト

そして、短い方の入力はに私たちを降りる251base64 -d<<<H4sIADyFv1UCA+3ZOw6EMAwFwH5PgeT735EOUSyfQAgOmVeCxUgusAkRbfOLqTARd0qAQCAQCAQCgcAvg80375dW/T+lQGAbsCCdgvsdXl0AAoHjgM8e7mUA92bKG+DtpAevDPflRsko7BXcKAQCD9+X3wOPCoFA4ABgnZ/OmcHTS+bw4PXzkV7Ak93KDdboVm6wxrOAQCAQCAQCgUAgENj++7BuZsq8xQ1vMQAA|gunzip
トビースパイツ

動作しますか?私は得るだけですgunzip: command not found。サブシェルを使用して動作させることができます:(base64 -d|gunzip)<<<...、それでも258バイトを使用します。
user2845840

奇妙な、@ user284584-あなたのパスに奇妙なものがありますか?(それが違いを作る場合は、インタラクティブシェルで)私は私が書いたものをテスト
トビースパイツ

ああ...コメントをコピーして、シェルに貼り付けてみてください。Stackexchangeは、6個の目に見えない文字をそれぞれ「便利に」挿入しました。それぞれ3個のu + 200cとu + 200bです。それらを削除した後、動作します。
user2845840
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.