Nの2乗を印刷


57

stdinから、または関数の引数として負でない整数Nを取り込むプログラムまたは関数を作成します。それは、それぞれが数NのN個のコピーで作られている中空のASCIIアートの正方形の文字列を印刷または返さなければなりません。

具体的には:

Nがの場合、N 0のコピーは使用されないため、出力(または単一の末尾の改行のみ)がありません。

Nがの1場合、出力は次のとおりです。

1

Nが2次の場合:

22
22

Nが3次の場合:

333
3 3
333

Nが4次の場合:

4444
4  4
4  4
4444

Nが5次の場合:

55555
5   5
5   5
5   5
55555

パターンは6through まで続き9ます。

Nがの10場合、出力は次のとおりです。

10101010101010101010
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10101010101010101010

これは実際には正方形ではないことに注意してください。高さは10行ですが、10長さは2文字であるため、幅は20列です。これは意図されたものです。ポイントは、「正方形」の各辺にN個のN個のコピーが含まれていることです。したがって、以降のすべての入力9は技術的にはASCII長方形になります。

たとえば、Nがの23場合、出力は次のとおりです。

2323232323232323232323232323232323232323232323
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
2323232323232323232323232323232323232323232323

ここのために必要な出力のPastebinsある99100111、と123(彼らは、ブラウザで間違って見えるかもしれませんが、テキストエディタで、彼らが正しい見ていきます)。1000Pastebin の出力は大きくなりますが、1000行4000列になります。4桁以上の数字は、小さな数字と同じように機能する必要があります。

詳細:

  • Nは、通常の10進数表記で、+符号または他の非数字を使用せずに記述する必要があります。
  • 中空の領域はスペースでのみ埋める必要があります。
  • 行の先頭または末尾にスペースを入れないでください。
  • 正方形の最後の行の後の単一の改行はオプションで許可されます。
  • この挑戦がなされた後に書かれた言語は歓迎されます、彼らはただ勝つ資格がありません
  • バイト単位の最短コードが勝ちです!

18
n = 10の正方形は、n = 5の正方形よりも正方形に見えます。やばい、非正方形フォント!
nneonneo

整数を文字列として取得できますか?
アダム

1
@Nᴮᶻはい、できます
カルビンの趣味

回答:


6

Jolf、31 27 25 23バイト

?=1i1ρρ,aii+*3έέi*li

これはISO-8859-7エンコードでエンコードされ、印刷できないものが含まれているため、hexdumpがあります。

0000000: 3f3d 3169 31f1 f12c 6169 692b 2a33 dd05  ?=1i1..,aii+*3..
0000010: dd69 052a 056c 69                        .i.*.li

オンラインこのバイオリンを試してみてくださいまたは(完全な実行]ボタンを使用)、一度にすべてのテストケースを検証します

これは、n = 0のエラーで終了します。これはデフォルト許可されています。

4 6 オフのゴルフをしてくれたConorに多大な感謝を!バイト。inb4は4つのコメントを削除したように見えますが、

説明

?=1i1ρρ,aii+*3έ\x05έi\x05*\x05li

?=1i1                             if input is 1 return 1, otherwise...
       ,aii+*3έ\x05               draw an input x input hollow box of tabs
      ρ            έi             replace all tabs with input
     ρ               \x05*\x05li  replace all spaces with spaces * length of input

hexdumpをどのように生成しましたか?
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴ私はxxdを使用しました。あなたはそれを逆にすることができxxd -rます。
spaghetto

16

ストライプ、317バイト

質問をしている間、新しい「純粋主義者」の言葉を誇示するかもしれません。

@ f x
 d x
 f
 @ f x
+ x y
 +
  i x
 @ + y
 h x
} x y
 e 1
 i 1
 d y
 d 1
 d x
 } x y
e 0
e 2
i 2
i 2
e 6
+ 2 2 6
+ 2 6 6
e T
+ 2 2 T
+ 6 T T
e N
t N
e P
+ T 0 P
e L
i L
*
 e x
 *
  + P x x
 @ * T
 h x
~
 } N P 0
 d 0
 i L
 * P
 ~
~
#
 p N
-
 s 6
_
 @ - L
$
 #
 @ _ n
 #
 s 2
@ # N
e n
+ N 0 n
d n
d n
s 2
@ $ n
@ # N

v1.0.0で確実に動作します

Shtripedには、増分と減分以外の数学演算は組み込まれていません。ループや条件もありませんので、これらのすべてをすべてのプログラムでゼロから構築する必要があります。

それは私のプログラムが行うことです。例えば@、本質的にforループ、+追加関数、}です>=。実際の出力は、プログラムの最後の8行でのみ生成されます。

Shtripedにも文字列はありません。文字列を取得および出力できますが、これらはすべて内部的に任意の精度の整数として表され、インクリメントとデクリメントのみが可能です。その10ため、正方形の中心を適切なスペースで埋めるために、文字列の長さを取得する簡単な方法はありません。Nの長さを10進数で見つけるために、~効果的に計算する関数をまとめなければなりfloor(log10(N)) + 1ませんでした。

これはおそらく、どこでどのようにどの変数を使用するかを再配置することで、もう少しゴルフができるかもしれませんがそれ以上ではありません。Shtriped固有の制限を回避することはできません。(とにかくゴルフ言語になることを意図したものではありませんでした。)

コメントされたコード(バックスラッシュはコメントです):

@ f x \ function that calls f() x times, returns 0
 d x
 f
 @ f x
+ x y \ returns x + y
 +
  i x
 @ + y
 h x
} x y \ returns 1 if x >= y, else 0
 e 1
 i 1
 d y
 d 1
 d x
 } x y

\ declare and set up variables for the numbers 0, 2, 6, 10
e 0 \ 0 is used to help copy values via +
e 2 \ 2 is used for printing newlines
i 2
i 2
e 6 \ 6 is used for printing spaces
+ 2 2 6
+ 2 6 6
e T \ 10 is used for finding the string length of N
+ 2 2 T
+ 6 T T

e N \ declare N
t N \ and set it to what the user inputs

\ all the code from here to the last ~ is for finding the length of N as a string

e P \ P is the current power of 10 (10, 100, 1000...), starting with 10
+ T 0 P
e L \ L will be the length of N in decimal digits
i L

* \ function that returns P times 10 by adding P to itself 10 times
 e x
 *
  + P x x
 @ * T
 h x

~ \ function that increments L and multiplies P by 10 until N < P, at which point L will be the string length of N
 } N P 0 \ the 0 variable can be used as a dummy now since we don't need it anymore
 d 0
 i L
 * P \ multiply P by 10 to 
 ~
~

\ helper functions for displaying the output
# \ simply prints N as a decimal integer
 p N
- \ prints a single space
 s 6
_ \ prints L spaces (L = digit length of N)
 @ - L
$ \ prints one of the central N-2 lines of the square
 #
 @ _ n
 #
 s 2

\ finally, call these functions to display the output
@ # N \ print N copies of N (top line of square)
e n \ declare n and set it to N - 2
+ N 0 n
d n
d n \ if N was 0 or 1 the program will end here, having printed nothing if 0 or just the top line if 1
s 2 \ print a newline
@ $ n \ print the central line of the square N-2 times
@ # N \ print N copies of N (bottom line of square)

\ the output always prints without a trailing newline

8

真剣に、32 31 30 29バイト

╩╜ó$╝╜Dbu╜╛*n╜¬;╛l*' *╛+╛@+n(

オンラインでお試しください!

説明:

╩╜ó$╝╜Dbu╜╛*n╜¬;╛l*' *╛+╛@+n(
╩                              push each input to its own register
                                 (we'll call register 0 "n")
 ╜                             push n to the stack
  ó                            terminate if 0
   $╝                          push str(n) to register 1
                                 (we'll call register 1 "s")
     ╜Dbu╜╛*n                  make min(2,n) copies of s*n (the top and bottom)
                                 (this avoids an extra copy if n is 1)
             ╜¬;               push n-2 twice
                ╛l*' *         push (n-2)*len(s) spaces
                      ╛+╛@+    put s on the front and end of the string (a middle piece)
                           n   push (n-2) total copies of the middle piece
                            (  bring the top piece to the top

5

JavaScript(ES6)、73 82 78バイト

@ user81655のおかげでa4バイトを節約

n=>(a=n[r='repeat'](n),n<2?a:a+`
${n+' '[r](n.length*(n-2))+n}`[r](n-2)+`
`+a)

入力用の数字ではなく、文字列を取ります。

オンラインで試してみてください(すべてのブラウザが動作します)


を置き換え*(n-2)*~-~-nバイトを保存できます。
ニール

それを固定@ user81655のおかげで、
Downgoat

5
それが、おかげで@Neil残念ながら任意のバイトを保存するためには表示されません
Downgoat

申し訳ありませんが、間違って数えたに違いありません。
ニール

5

MATL34 29 26バイト

:G\2<t!+gQ"@!2GVYX1GVnZ"YX

これは、現在のリリース(13.0.0)の言語/コンパイラで動作します

オンラインでお試しください!

:            % array [1,2,...,N], where N is input, taken implicitly
G\           % modulo N. Gives [1,2,...,N-1,0]
2<           % smaller than 2? Gives [1,0,...,0,1]
t!           % duplicate, transpose
+            % addition with broadcast. Gives 2D array with nonzeros in the border 
             % and zeros in the interior
gQ           % convert to logical, add 1: twos in the border, ones in the interior
"            % for each column of that array (note the array is a symmetric matrix,
             % so columns and rows are the same)
  @!         %   push column. Transpose into a row        
  2GVYX      %   replace twos by the string representation of N, via regexp
  1GVnZ"YX   %   replace ones by as many spaces as length of that string, via regexp
             % end for each, implicitly
             % display stack contents, implicitly

5

T-SQL / SQL Serverの2012+、167の 161バイト

DECLARE @ INT = 6;

SELECT IIF(u IN(1,s),REPLICATE(s,s),CONCAT(s,REPLICATE(' ',s-2*LEN(s)),s))
FROM(SELECT @ s)z CROSS APPLY(SELECT TOP(s)ROW_NUMBER()OVER(ORDER BY 1/0)u FROM sys.messages)v

出力:

666666 
6    6 
6    6  
6    6  
6    6 
666666 

LiveDemo

目的のサイズを入力し、クリックRun queryしてテキスト表現を取得します。

このデモでは固定幅フォントは表示されないことに注意してください。だから7よりも厚いです1


編集:

入力を文字列として扱う場合:

DECLARE @ VARCHAR(10) = '7';

SELECT IIF(u IN(1,s),REPLICATE(s,s),s+REPLICATE(' ',s-2*LEN(s))+s)
FROM(SELECT @ s)z CROSS APPLY(SELECT TOP(s+0)ROW_NUMBER()OVER(ORDER BY 1/0)u FROM sys.messages)v

LiveDemo2


これはとてもいいことです。他のスクリプトの一部を少し短くする方法を学びました。1/0とsys.messages順を知りませんでした
t-clausen.dk

サイドノート。バイトをカウントするとき、入力パラメータの宣言は本当に含まれるべきですか?
t-clausen.dk

@ t-clausen.dkルールのカウントについてはわかりませんが、SQLが適用されるとき、メタについて尋ねてお知らせします。
lad2025

1
s varchar(この '6'など)を作成することで数バイトを節約できます。その後、concatを+に置き換えます。
t-clausen.dk

1
いくつかのスペースが不足しているようです。私はあなたが(S-2)を書き込むことによってそれを修正することができると信じて
t-clausen.dk

4

ジュリア、78バイト

n->(s="$n";(p=println)(s^n);[p(s*" "^(n-2)endof(s)*s)for i=2:n-1];n>1&&p(s^n))

これは整数を受け入れ、ASCII長方形をSTDOUTに出力する匿名関数です。呼び出すには、変数に割り当てます。

ゴルフをしていない:

function f(n)
    # Save a string version of n
    s = "$n"

    # Print the top line
    println(s^n)

    # Print each middle line
    [println(s * " "^(n-2)endof(s) * s) for i = 2:n-1]

    # Print the last line if there is one
    n > 1 && println(s^n)
end

オンラインで試す


4

ルビー、100バイト

->n{s="";n.times{|i|s+=(i<1||i>n-2?"#{n}"*n :"#{n}#{' '*[(n-2)*n.to_s.size,0].max}#{n}")+$/};puts s}

残念なことに、JSを倒すことさえできませんでした。それを下にゴルフするためのさらなる助けがあれば幸いです。

これは多かれ少なかれ未使用のバージョンです:

def f(n)
    n.times{|num|
        if num == 0 || num == n-1
            s += "#{n}" * n
        else
            s += "#{n}"+" "*[(n-2)*n.to_s.length,0].max+"#{n}"
        end
        s += "\n"
    }
    puts s
end

1
最初の部分と2番目の部分にn.to_s使用できるように、変数を非常に多く使用するため、変数を割り当てることができます。m*nm+" "*[(n-2)*m.length,0].max+m
バリューインク

この回答に基づいて75バイトバージョンを作成しました。(Javascriptは現在78バイトです)オンラインで試してみてください!
benj2240


4

C ++ 14、156文字

ここでは他のほとんどのエントリに勝るものはありませんが、かなりクールなソリューションだと思いました。

#define f for(i=0;i++<n;c<<t);
[](string t){auto&c=cout;int n=stoi(t),i;f c<<'\n';for(i=0;++i<n-1;c<<t,c.width(~-n*size(t)+1),c.fill(0),c<<t+'\n');if(n-1)f}

ゴルフをしていない:

#define f for ( i = 0; i++ < n; c << t ); // print top/bot row
[](string t) {
  auto& c = cout;
  int n = stoi(t), i;
  f // print first row
  c << '\n'; // kind of annoying but no way to get rid of (yes I tried
             // c << '\n'+t instead of c << t+'\n')
  for ( i = 0; ++i < n - 1; ) {
    c << t; // output the number
    // then we we get the width of necessary spaces
    c.width(~-n*size(t)+1); // Equivalent to (n-1)*size(t) + 1, but we save
                            // two bytes since ~- takes precedence over
                            // multiplication
    c.fill(0); // fill with spaces, ' ' == 0
    c << t+'\n';
   }
   if ( n-1 ) f // This if statement is dissapointing 
}

そしていつものように、関数を呼び出すには [](string t) { ... }("10");


4

TSQL、112 104バイト

DECLARE @ varchar(10)='12'

PRINT REPLICATE(@,@)+ISNULL('
'+REPLICATE(@+ISNULL(SPACE((@-2)*len(@))+@,'')+'
',@-2)+REPLICATE(@,@),'')
1. generating first line
2. adding hollow lines + line breaks
3. adding last line(when needed)

T-SQLを知らない私たちに説明を追加できますか?

@catは簡単な説明を書き、フィドルを含めました
-t-clausen.dk

興味深い、ありがとう!:あなたのバイト数がオフになる場合もありますように見えますここにチェック

@catありがとう。そのためのリンクを探していました。ただし、FROMの最後の行は、Xに値を宣言して割り当てるだけです。値の割り当てと変数の宣言はカウントされないと聞きました。私が間違っている場合は私を修正してください。この変数の割り当てで数バイトを節約しようとしました。通常の変数には接頭辞@が付き、それを使用するたびに1バイト余分にコストがかかります
-t-clausen.dk

1
@mazzyはい、そうです-3.最後の行を追加する(必要な場合)
t-clausen.dk

3

Minkolang 0.15、57バイト

nd?.d1-2&N.$z01FlOz2-[lz6Z" "I2-z2-*Dz6Z$O]01F.
z[z6Z]$Of

ここで試してみてください!

説明

n                Read number from input
 d?.             Stop if n=0, continue otherwise
    d1-2&N.      Print 1 and stop if n=1, continue otherwise
           $z    Store top of stack in register (z, which is n)

01F                                   Gosub to second line
   lO                                 Print newline
     z2-                              Push value from register and subtract 2
        [                             Pop k and run body of for loop k times
                                      (Does not run if k <= 0)
         l                            Push a newline
          z6Z                         Push z and convert to string
             " "                      Push a space
                I2-                   Push length of stack minus 2
                   z2-                Push z minus 2
                      *               Pop b,a and push a,b
                       D              Pop k and duplicate top of stack k times
                        z6Z           Push z and convert to string
                           $O         Output whole stack as characters
                             ]        Close for loop
                              01F.    Gosub to second line and stop after returning.


z[   ]       For loop that runs z times
  z6Z        Push z and convert to string
      $O     Output whole stack as characters
        f    Return to position called from

3

Perl、79 76 74バイト

$_=$.=pop;s/./ /g;print$.x$.,$/,($.,$_ x($.-2),$.,$/)x($.-2),$.>1?$.x$.:''

とても簡単です。最初のコマンドライン引数が数値として使用されます。スクリプトをファイルに配置し、で実行しperl file.pl 1ます。


shiftに置き換えることができますpop
オレグV.ボルコフ

3

Perl、62 60 58 + 2 = 60バイト

for$.(1..$_){say$.>1&$.<$_?$_.$"x(y...c*($_-2)).$_:$_ x$_}

-nlEフラグが必要です:

$ perl -nlE'for$.(1..$_){say$.>1&$.<$_?$_.$"x(y...c*($_-2)).$_:$_ x$_}' <<< 5
55555
5   5
5   5
5   5
55555

スペースを追加した場合:

for$.(1..$_) {
  say(
    $. > 1 & $. < $_
      ? $_ . $"x(length$_*($_-2)) . $_
      : $_ x $_
  )
}

3

R、90バイト

x=scan();m=matrix(x,x,x);k=2:(x-1)*(x>2);m[k,k]=format("",w=nchar(x));write(m,"",n=x,s="")

これにより、x*xサイズのマトリックスが作成され、サイズのスペースで埋められますnchar(x)x2より小さい場合、何も入力されていません。


私はこれが1年後であることを知っていますx=scan();m=matrix(x,x,x);m[k<--c(1,x),k]=format("",w=nchar(x));write(m,"",x,,"")が、... ネガティブインデックスを使用n=x,s=''し、x,,'' tio.run / nexus / r#DYpBCsAgDAT
Giuseppe

@Giuseppeそして今、完全に読めない何かのために... もう1バイト節約します。
JayCe

write("[<-"(matrix(x<-scan(),x,x),k<--c(1,x),k,gsub("."," ",x)),1,x,,"")72バイト。
J.Doe


3

ピップ -l、21バイト

現在のポリシーで許可されている質問よりも新しい言語機能を使用します。質問の文言が上記のポリシーをオーバーライドすると解釈される場合は、以下の25バイトの回答を参照してください。

Yq{MN++g%y>1?sMyy}MCy

オンラインでお試しください!

ルイス・MendoのおかげMATLの答えのための(a+1)%n<2トリック。

説明

Yqstdinから行を読み取り、それをにヤンクしyます。次に:

{              }MCy  Map this function to each coordinate pair in a y-by-y grid
                     (Inside the function, the list of both coords is g)
   ++g                Increment both coordinates
      %y              Take them mod y
 MN     >1?           Test whether the min of the resulting list is 2 or greater
           sMy         If so, it's in the center; use len(y) spaces
              y        If not, it's an edge; use the number y
                     Print result with newlines between rows (implicit, -l flag)

元の2016年の回答、25バイト(および-lフラグ):

Yq{MN++*a%y<2?ysX#y}MMCGy

変更ログ:

  • MC最近追加されました。当時はMMCG(map-map + ordinate-grid)を使用していました。
  • 現在のインタープリター++にはリストでの使用を妨げるバグがあったため、代わりに++*++各要素に適用)する必要がありました。
  • Mapは拡張されました:<string1> M <string2>len(<string2>)コピーのリストを返すようになりました<string1>; 当時はsX#y、文字列を繰り返すスペースを使用していましたlen(y)

2

Pyth、37 30バイト

J*K`QQI>Q1JV-Q2++Q*d-lJ*2lKQ;J

ここで試してみてください。

J*K`QQ                          set K to repr(input); that is, stringified
                                  set J to K repeated (input) times
      I>Q1                  ;   if input is greater than 1...
          J                     output J (stringified input times input)
           V-Q2                 do this (input - 2) times...
               ++               output the following on one line:
                 Q              the input number
                  *d-lJ*2lK     n spaces, where n = len(J) - 2*len(K)
                           Q    the input number again
                            ;   break out of everything
                             J  output J (str(input)*input) one last time,
                                  regardless of whether input > 1

2

網膜、90

繰り返しになりますが、私はこれが専門家によって大いにゴルフできることを確信しています。

.+
$&$&$*:$&$*;
+`(\d+:):
$1$1
+`([\d+:]+;);
$1$1
T`d` `(?<=;\d+:)[^;]+(?=:\d+:;\d)
:

;
¶

オンラインでお試しください。


1
Retinaの回答も投稿しましたが、それほど小さくはありません。(最後のステージを取り除く代わりに使用できます;か?)
randomra

@randomraまあ80 <90なので、私からの議論はありません:)
デジタルトラウマ

そして、ピルクロウを使用すると便利[^¶]+です.+
randomra


2

Pyke、33バイト(非競合)

QD`i*Djli2*lR-k*iRi]3J"bR+2Q-*jR+

説明:

                                  - autoassign Q = eval_or_not(input())
QD`i*                             - Get the input multiplied by itself
Q                                 - [Q]
 D                                - [Q, Q]
  `                               - [repr(Q), Q]
   i                              - i = stack[0]
    *                             - [stack[0]*stack[1]]

     Djli2*lR-                    - Get number of spaces
     D                            - [^,^]
      j                           - j = stack[0]
       l                          - len(stack[0])
        i2*                       - i*2
           l                      - len(stack[0])
            R                     - rotate_2()
             -                    - stack[0]-stack[1]

              k*iRi               - Get middle line
              k*                  - " "*^
                iRi               - [i,^,i]

                   ]3J"bR+        - Join middle line together
                   ]3             - list(stack[:3])
                     J"           - "".join(stack[0])
                       bR+        - ^+"\n"

                          2Q-     - Get middle lines
                          2Q-*    - Q-2

                              jR+ - Add end line
                              jR+ - ^+j

2

CJam、27バイト

ri:X,_ff{a+[0X(]&XXs,S*?}N*

提案してくれた@MartinBüttnerに感謝しffます。a+[0X(]&まあしかし、かなり怪しいです。

オンラインでお試しください!

ri:X              Read input integer and save as variable X
,_                Range, i.e. [0 1 ... X-1] and make a copy
ff{...}           Map with extra parameter, twice. This is like doing a Cartesian product
                  between two 1D arrays, but we get a nice X by X array at the end

                  For each coordinate pair,
a+                Put the two coordinates into an array
[0X(]&            Set intersection with the array [0 X-1]
X                 Push X
Xs,S*             Push a number of spaces equal to the length of X
?                 Ternary: choose one of the previous two depending on the set intersection

N*                Join X by X array with newlines


2

Haskell、78バイト

i x=unlines$take x$1#s:3#[s++(3#s>>" ")++s]++[1#s]where s=show x;z#s=[z..x]>>s

使用例:

*Main> putStr $ i 4
4444
4  4
4  4
4444

機能は>>便利です:<list> >> <string>作るlength <list>のコピー<string>のために、例えば、トップとボトムラインをx=10しています[1..10] >> "10"- > "10101010101010101010"



1
@MaxYekhlakov:おかげで、残念ながらあなたのバージョンは動作しません1これは、単一の出力を叫びます1。また、チャレンジは単一の文字列を要求するのに対して、文字列のリストを返します。かつてはより厳格なIOルールがありましたが、柔軟なIOルールは最近のものです。
nimi

2

Perl、72バイト

$_=($.=pop)-2;say for($.x$.,($..($.x$_)=~s/./ /rg.$.)x$_,$.x$.)[0..$.-1]

最新のPerl機能に依存しています。

「何か」と言う

Perl 5.10以降で自動的に使用可能になります(v5.10以降を使用してください)。

str_expr =〜s /.../.../ r

最初のstr_exprを変更せずにrの結果(正規表現の最後にある' r 'オプション)を生成するために、rvalue(str_exprは必ずしもスカラー変数に縮小される必要はありません)を処理することを喜んで受け入れます。


2

PHP、151バイト

function s($n){for($r=0;$r<$n;$r++){for($c=0;$c<$n;$c++){if($r*$c&&$r!=$n-1&&$c!=$n-1){for($d=0;$d<=log10($n);$d++){echo' ';}}else{echo$n;}}echo"\n";}}

絶対に混乱して、最適化するのにもっと時間が必要です。 s(Number)出力が得られます。


2

Java 8、280バイト

interface A{static<T>void p(T o){System.out.print(o);}static void main(String[]a){long n=new Long(a[0]),l=a[0].length();for(long i=0;i<n;i++,p(a[0]));p("\n"+(n>1?a[0]:""));for(long j=2;j<n;j++,p(a[0])){for(long i=l*2;i<n*l;i++,p(' '));p(a[0]+"\n");}for(long i=1;i<n;i++)p(a[0]);}}

最短回答の約10倍の長さで、Javaにとっては本当に良いことです!

実行例:

$ java A 10
10101010101010101010
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10101010101010101010

2

Python 3、 108 96 148バイト

a=input()
b=c=int(a)-2 if a!="1" else 0
print(a*int(a))
while b:print(a+" "*int(len(a))*c+a);b-=1
if a!="1":print(a*int(a))

未ゴルフ/説明:

number = input() # Gets a number as input
iterator = var = int(number) - 2 if number != "1" else 0 # Assigns two variables, one of them an iterator, to the number minus 2 (the amount of middle rows in the square) if the number isn't 1. If it is, it sets the vars to 0 so the while doesn't trigger.
print(number * int(number)) # Prints the top row of the square.
while iterator != 0: # Loops for the middle rows
    print(number + " " * int(len(number)) * var + number) # Prints the number, then as many spaces as needed, and the number.
    iterator -= 1 # De-increments the iterator.
if number != 1: # Makes sure the number isn't 1, because 1 should return 1.
    print(a * int(a)) # Same as the first row, it prints the bottom row.

これが私の最初の答えなので、建設的な批判や提案が役立つでしょう!


1
インデントに単一のスペースを使用して、いくつかのバイトを削ります。実際、ループ全体をインライン化できますwhile b!=0:print(a+" "*int(len(a))*c+1);b-=1。さらに、while b:はと同等であるためwhile b!=0、さらに3バイトがなくなっています。
メゴ

バグ修正:入力1は、無限ループではなく1を出力するようになりました(私のブラウザーは本当に悲しみを与えてくれました)。これにより、さらに多くのバイトが必要になります。
OldBunny2800

2

錆び、141 137バイト

いくつかの書式設定を乱用していました。そうでなければ、これはずっと長くなっていたでしょう。

|i|{let f=||{for _ in 0..i{print!("{}",i)}println!("")};f();if i>1{for _ in 0..i-2{println!("{}{0:1$}",i,i.to_string().len()*(i-1))}f()}}

開梱:

|i| {
    let f = || {
        for _ in 0..i {
            print!("{}",i)
        }
        println!("")
    };

    f();

    if i>1 {
        for _ in 0..i-2 {
            println!("{}{0:1$}",i,i.to_string().len()*(i-1))
        }
        f()
    }
}

遊び場リンク


ここで試してもうまくいきません。これをどのようにテストできますか?
Rɪᴋᴇʀ

ここに遊び場のリンクがあるのでテストすることができます。クロージャーを使用したので、まず変数に割り当ててから呼び出します。
Aceeri 16

かっこいい、イケてる。さびは本当に知りませんが、素晴らしい答えです!
Rɪᴋᴇʀ

2

Powershell、98 96 95 83 82 75バイト

param($n)($l="$n"*$n)
if(($m=$n-2)-ge0){,"$n$(' '*"$n".Length*$m)$n"*$m
$l}

テストされていないテストスクリプト:

$f = {

    param($n)
    ($l="$n"*$n)                #   let $l is a string contains N only and return this value as a first line
    $m=$n-2
    if($m-ge0){                 # if(N>1)
        $s=' '*"$n".Length*$m   #   let $s is spaces inside repeated (length of string represented of n * m)
        ,"$n$s$n"*$m            #   return $m strings contains: N, spaces and N
        $l                      #   retrun the first line again
    }

}

&$f 1
&$f 2
&$f 3
&$f 4
&$f 10

出力:

1
22
22
333
3 3
333
4444
4  4
4  4
4444
10101010101010101010
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10101010101010101010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.