指定された幅で#の中空の正方形を描画します


21

私はCodingameからこの課題を受け取り、私のものよりも優れたソリューションに興味があります。

標準入力を使用して幅を指定すると、指定された幅と長さで「#」の中空の四角形が描画されます。

例:

5の結果

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

私はこれを解決するためにPythonを使用したので、他のPythonコードに特に興味があります。ただし、必要な言語でソリューションを投稿してください。


7
入力が0または1の場合はどうなりますか?
カールナップ

8
関連しますが、これはだまされないほど十分に異なるかもしれません。
-AdmBorkBork

3
PPCGへようこそ!今後の質問については、メインページに投稿する前にチャレンジに関する有意義なフィードバックを得ることができるSandboxを使用することをお勧めします。
-AdmBorkBork

4
答えを読んで、私はそれがだまされているとは思いません。ここでの回答(ゴルフと通常の言語)のほとんどは、「Print N Squared」の回答の約半分のサイズです。
AdmBorkBork

1
これは絶対に重複しています。他の課題からのソリューションは、ここで有効かつ競争力があるように簡単に変更できます。
メゴ

回答:



12

、6バイト

コード:

NβBββ#

説明:

Nβ        # Get input from the command line and store into β
   B      # Draw a hollow box with...
     β     #  Width β
      β    #  Height β
       #   #  Filled with the character '#'
           # Implicitly output the box

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


1
Charcoalで入力を読み取る方法を見つけようとしていました。今知っている:)
エミグナ

1
@Emigna Pythonのようint(input())に式でも使用できることに注意してください。この課題が「与えられた幅と高さで中空の長方形を描く」なら、解決策は次のようになりますBNN#
DLosc

Charcoalは非UTF8文字セットを使用しますか?
OldBunny2800

これは、6バイトではなく6文字のように見えます。βには多くの代替8ビット文字セットがありますが、N(Nではない)については疑わしいです
スパー

3
@Sparr Charcoalは独自のコードページを使用します。
コナーオブライエン

8

MATL、12バイト

:G\1>&*~35*c

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

説明

:     % Input n implicitly. Push range [1 2 ... n]
      % STACK: [1 2 3 4 5]
G     % Push n again
      % STACK: [1 2 3 4 5], 5
\     % Modulo
      % STACK: [1 2 3 4 0]
1>    % Does each entry exceed 1?
      % STACK: [0 1 1 1 0]
&*    % Matrix with all pair-wise products
      % STACK: [0 0 0 0 0;
                0 1 1 1 0;
                0 1 1 1 0;
                0 1 1 1 0;
                0 0 0 0 0]
~     % Negate
      % STACK: [1 1 1 1 1;
                1 0 0 0 1;
                1 0 0 0 1;
                1 0 0 0 1;
                1 1 1 1 1]
35*   % Multiply by 35
      % STACK: [35 35 35 35 35;
                35  0  0  0 35;
                35  0  0  0 35;
                35  0  0  0 35;
                35 35 35 35 35]
c     % Convert to char. 0 is interpreted as space. Display implicitly
      % STACK: ['#####';
                '#   #';
                '#   #';
                '#   #';
                '#####']


6

パイソン2、62の 54バイト

f=lambda n:'#'*n+'\n#%s#'%(' '*(n-2))*(n-2)+'\n'+'#'*n

#\n#入力が次の場合に戻ります1

印刷する55バイトバージョン

def f(n):a=n-2;print'#'*n,'\n#%s#'%(' '*a)*a,'\n'+'#'*n

すべての入力で機能する62バイトバージョン:

f=lambda n:'#'*n+'\n#%s#'%(' '*(n-2))*(n-2)+('\n'+'#'*n)*(n>1)

2
f=使用しない限り、言う必要はありません。
ダニエル

@Dopapp私は知っているが、私はそれがより多くのだと思う公正な方法(フル機能/プログラムと比較して)いること
ロッド

@Rodあなたの選択ですが、匿名関数についてはそれらを許可するポリシーがあります。
エリックアウトゴルファー16年

5

COW426の 405 348 330バイト

MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMMMmoOMMMMoOMoOMoOMoOMoOMoOMoOMoOMoO
MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMMMmoOMMMMoOMoOMoOmoOoomMMM
moOMMMMOOmOomOoMoomoOmoOMOomoomOoMMMmoOMMMMOoMOoMOOmOomOomOomOoMoo
moOmoOMoomoOMMMmoOmoOMMMMOoMOoMOOmOomOomOomOoMoomoOmoOmoOmoOMOomoo
mOomOomOoMoomoOmoOMOomoomOomOomOomOoMoomoOmoOmoOMOOmOoMoomoOMOomoo

オンラインでお試しください! 2行目の数値を任意の数値に変更して、出力を変更します。

ここで使用しているCOWインタープリターはPerlで書かれています(このチャレンジよりも新しい)が、ここにコードを入力することで同じ結果を得ることができます

説明

; Note: [n] means "value stored in the nth block of memory".
MoOMoOMoOMoOMoOMoOMoOMoOMoOMoO                                                  ;Stores 10 in [0].  10 is the code point for carriage return
MMMmoOMMMMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoO     ;Stores 32 in [1].  32 is the code point for whitespace
MMMmoOMMMMoOMoOMoO                                                              ;Stores 35 in [2].  35 is the code point for #
moOoom                                                                          ;Reads STDIN for an integer, and stores it in [3]
MMMmoOMMM                                                                       ;Copies [3] into [4] 
MOO                                                                             ;Loop as long as [4] is non-zero
    mOomOoMoo                                                                   ;Navigate to [2] and print the character with that code point
    moOmoOMOo                                                                   ;Navigate to [4] and decrement
moo                                                                             ;End loop
mOoMMMmoOMMMMOoMOo                                                              ;Copy [3] into [4] and decrement [4] twice
MOO                                                                             ;Loop as long as [4] is non-zero
    mOomOomOomOoMoo                                                             ;Navigate to [0] and print the character with that code point
    moOmoOMoo                                                                   ;Navigate to [2] and print the character with that code point
    moOMMMmoOmoOMMMMOoMOo                                                       ;Navigate to [3] and copy it into [5], then decrement [5] twice
    MOO                                                                         ;Loop as long as [5] is non-zero
        mOomOomOomOoMoo                                                         ;Navigate to [1] and print the character with that code point
        moOmoOmoOmoOMOo                                                         ;Navigate to [5] and decrement
    moo                                                                         ;End loop
    mOomOomOoMoo                                                                ;Navigate to [2] and print the character with that code point
    moOmoOMOo                                                                   ;Navigate to [4] and decrement
moo                                                                             ;End loop
mOomOomOomOoMoo                                                                 ;Navigate to [0] and print the character with that code point
moOmoOmoO                                                                       ;Navigate to [3]
MOO                                                                             ;Loop as long as [3] is non-zero
    mOoMoo                                                                      ;Navigate to [2] and print the character with that code point
    moOMOo                                                                      ;Navigate to [3] and decrement
moo                                                                             ;End loop

4

Pythonの2、59の 58バイト

n=i=input()
while i:print'#%s#'%((' #'[i%n<2])*(n-2));i-=1

repl.it

注:の入力は1の出力を生成しますが##、入力が未満の場合、中空の正方形は生成されないため、3これで問題ないと思います。


4

Java 7、113 112 110バイト

String c(int n){String r="";for(int i=n,j;i-->0;r+="\n")for(j=0;j<n;r+=i*j<1|n-i<2|n-j++<2?"#":" ");return r;}

@OlivierGrégoireのおかげで1バイト節約されました。@cliffrootの
おかげで2バイト節約されました。

交差した正方形の作成の回答に基づいた派生ソリューション。

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


1
次のようにしてバイトを削ることはできますfor(int i=n,j;i-->0;r+="\n")か?一番下の行か一番上の行かは関係ないので、その順序を維持しても意味がありませんか?
オリビエグレゴワール

1
@OlivierGrégoireありがとう!同じことを行うことができるので、「交差した正方形の作成」回答でも編集しました。
ケビンCruijssen 16年

4

PowerShell v2 +、48 47バイト

param($n)($z='#'*$n--);,("#$(' '*--$n)#")*$n;$z

JohnLBevanのおかげで-1バイト

入力を受け取り、ポストデクリメント付きでハッシュマークとして$n設定$zします。それを括弧でカプセル化して、コピーをパイプラインに配置します。次に、カンマ演算子を使用して、スペース、...の事前にデクリメントされた行の配列を作成します。それらはパイプラインに残っています。その後、パイプラインに再び配置します。最後に暗黙的に出力すると、要素間に改行が導入されるため、無料で取得できます。$n$n$n##$zWrite-Output

以来OPのコードは、入力のための仕事をしませんn <= 1、私たちはサポート入力する必要はありません意味することを取った1のいずれか、。

PS C:\Tools\Scripts\golfing> 2..6|%{"$_";.\draw-a-hollow-square.ps1 $_;""}
2
##
##

3
###
# #
###

4
####
#  #
#  #
####

5
#####
#   #
#   #
#   #
#####

6
######
#    #
#    #
#    #
#    #
######

別のバイトをノックオフできますparam($n)($z='#'*$n--);,("#$(' '*--$n)#")*$n;$z
。– JohnLBevan

1
@JohnLBevanスクリプトブロックを使用することをお勧めします。ありがとう!
AdmBorkBork

3

C、98バイト

f(n,i){i=n*(n+1);while(i--){putchar(i%(n+1)==n?10:i<n||i>n*n-1||i%(n+1)==0||i%(n+1)==n-1?35:32);}}

使用法:

f(5)


3

WinDbgを、206の 200 182 170バイト

.if@$t0{r$t3=2000000;f@$t3 L@$t0 23;f2*@$t3 L@$t0 20;eb2*@$t3 23;eb2*@$t3+@$t0-1 23;da@$t3 L@$t0;j1<@$t0'.for(r$t1=@$t0-2;@$t1;r$t1=@$t1-1){da2*@$t3 L@$t0};da@$t3 L@$t0'}

-6バイトからの括弧の削除と2番目の代わりの.if使用j.if

-18バイトのf代わりにa .forを使用して文字列を作成します。

NULLで終わる文字列ではなく-12バイト、代わりに長さを渡す da

入力は、疑似レジスターを介して渡されます$t0(例:)r $t0 = 5; {above-code}

説明:

.if @$t0                                                *Verify width($t0) at least 1 
{                                                       *(registers have unsigned values) 
    r $t3 = 2000000;                                    *Set $t3 to address where the 
                                                        *string will be constructed
    f @$t3 L@$t0 23;                                    *Put width($t0) '#' at 2000000($t3)
    f 2 * @$t3 L@$t0 20;                                *Put width($t0) ' ' at 4000000(2*$t3)
    eb 2 * @$t3 23;                                     *Put '#' on left of ' ' string
    eb 2 * @$t3 + @$t0 - 1 23;                          *Put '#' on right of ' ' string
    da @$t3 L@$t0;                                      *Print the top of the box
    j 1 < @$t0                                          *If width($t1) at least 2
    '
        .for (r $t1 = @$t0 - 2; @$t1; r $t1 = @$t1 - 1) *Loop width($t0)-2 times to...
        {
            da 2 * @$t3 L@$t0                           *...print the sides of the box
        };
        da @$t3 L@$t0                                   *Print the bottom of the box
    '
}

サンプル出力:

0:000> r$t0=0
0:000> .if@$t0{r$t3=2000000;f@$t3 L@$t0 23;f2*@$t3 L@$t0 20;eb2*@$t3 23;eb2*@$t3+@$t0-1 23;da@$t3 L@$t0;j1<@$t0'.for(r$t1=@$t0-2;@$t1;r$t1=@$t1-1){da2*@$t3 L@$t0};da@$t3 L@$t0'}

0:000> r$t0=1
0:000> .if@$t0{r$t3=2000000;f@$t3 L@$t0 23;f2*@$t3 L@$t0 20;eb2*@$t3 23;eb2*@$t3+@$t0-1 23;da@$t3 L@$t0;j1<@$t0'.for(r$t1=@$t0-2;@$t1;r$t1=@$t1-1){da2*@$t3 L@$t0};da@$t3 L@$t0'}
Filled 0x1 bytes
Filled 0x1 bytes
02000000  "#"

0:000> r$t0=2
0:000> .if@$t0{r$t3=2000000;f@$t3 L@$t0 23;f2*@$t3 L@$t0 20;eb2*@$t3 23;eb2*@$t3+@$t0-1 23;da@$t3 L@$t0;j1<@$t0'.for(r$t1=@$t0-2;@$t1;r$t1=@$t1-1){da2*@$t3 L@$t0};da@$t3 L@$t0'}
Filled 0x2 bytes
Filled 0x2 bytes
02000000  "##"
02000000  "##"

0:000> r$t0=5
0:000> .if@$t0{r$t3=2000000;f@$t3 L@$t0 23;f2*@$t3 L@$t0 20;eb2*@$t3 23;eb2*@$t3+@$t0-1 23;da@$t3 L@$t0;j1<@$t0'.for(r$t1=@$t0-2;@$t1;r$t1=@$t1-1){da2*@$t3 L@$t0};da@$t3 L@$t0'}
Filled 0x5 bytes
Filled 0x5 bytes
02000000  "#####"
04000000  "#   #"
04000000  "#   #"
04000000  "#   #"
02000000  "#####"

3

JavaScript、61 58バイト

@lmisのおかげで3バイト節約されました

n=>(b='#'[r='repeat'](n))+`
#${' '[r](n-=2)}#`[r](n)+`
`+b

(処理しません0または1

13バイト(71バイト)を追加することができます!

n=>n?n-1?(b='#'[r='repeat'](n))+`
#${' '[r](n-=2)}#`[r](n)+`
`+b:'#':''

これらのソリューションは非常に単純です。数バイトを節約するために繰り返さないために大量のストレージを使用します。variablsmなしで縮小されていない場合、次のようになります。

n => // Anonymous function definition (Param `n` is the size)
    '#'.repeat(n) +      // # `n` times to form the top
    `
#${' '.repeat(n - 2)}#`  // Followed by a newline followed by a hash and `n` - 2 spaces and
                         // another hash to make one of the middle lines
    .repeat(n - 2) +     // The above middle lines repeated `n` - 2 times
    '#'.repeat(n)        // Followed by the top line again

それを試してみてください!

<script type="text/babel">var f=n=>n?n-1?(b='#'[r='repeat'](n))+`\n#${' '[r](n-=2)}#`[r](n)+`\n`+b:'#':'',b,r;function c(){document.getElementById('pre').textContent = f(+document.getElementById('input').value);}</script><input id="input" onkeydown="c();" onkeyup="c();" onchange="c();" onclick="c();" placeholder="Size"><pre id="pre"></pre>


!n?'':n==1?'#':関数本体の先頭にを追加して15バイト追加すると、入力0とを処理できます1
ケーラ

1
n=>(b='#'[r='repeat'](n))そして、#${" "[r](n-=2)}などは繰り返しを避けることで3バイト節約しますrepeat:)
Lmis

2

Python、109バイト

n=int(input())
for x in range(n):
 r=list(' '*n);r[0]=r[-1]='#'
 if x%(n-1)==0:r='#'*n
 print("".join(r))

1
あなたは置き換えることができlist(' '*n)[' ']*n。また、置き換えることができx%(n-1)x%~-n
小麦ウィザード

また、あなたがオンにした場合for、リストの内包表記にブロックをあなたは20の以上のバイトを保存することができます
ロッド

また、Python 2に切り替え、ドロップint()し、括弧を囲みますprint
アーチャー

<1代わりに使用します==0
mbomb007

2

ルビー、39バイト

->n{puts a=?#*n,[?#+' '*(n-=2)+?#]*n,a}

私が試みていたすべての派手なものよりもこのように短いことが判明しました。これは0または1をまったく処理しないことに注意してください。


2

Python 2、50バイト

m=input()-2
for c in'#'+' '*m+'#':print'#'+m*c+'#'

で動作しn>=2ます。n-2適切な記号のポンド記号、さらに別のポンド記号で各行を印刷します。

ポンド記号のエイリアスは同じ長さを与えます:

m=input()-2;p='#'
for c in p+' '*m+p:print p+m*c+p

その他の試み:

lambda n:'#'*n+('\n#'+' '*(n-2)+'#')*(n-2)+'\n'+'#'*n

lambda n:'#'*n+'\n#%s#'%((n-2)*' ')*(n-2)+'\n'+'#'*n

lambda n:'\n'.join(['#'*n]+['#'+' '*(n-2)+'#']*(n-2)+['#'*n])

n=input();s='#'+' '*(n-2)+'#'
for c in s:print[s,'#'*n][c>' ']

s='##'+' #'*(input()-2)+'##'
for c in s[::2]:print s[c>' '::2]

s='#'+' '*(input()-2)+'#'
for c in s:print s.replace(' ',c)

2

Haskell、49バイト

n%b='#':(b<$[3..n])++"#\n"
f n=(n%)=<<init(n%' ')

で動作しn>=2ます。改行文字で終了する文字列#に対して文字を挟む操作を定義し、n2回適用して2Dグリッドを作成します。

次のように呼び出します:

*Main> putStrLn$ f 5
#####
#   #
#   #
#   #
#####

2

C、83 82 80 78 77バイト

i,j;f(n){for(i=n;i--;puts(""))for(j=n;j--;putchar(i*j&&i^n-1&&j^n-1?32:35));}

乗算をこっそりして、バイトを保存...

i,j;f(n){for(i=n;i--;puts(""))for(j=n;j--;putchar(i&&j&&i^n-1&&j^n-1?32:35));}

また、jをカウントダウンして、さらにいくつか保存します...

i,j;f(n){for(i=n;i--;puts(""))for(j=0;j++<n;putchar(i&&j^1&&i^n-1&&j^n?32:35));}

iをnから0までカウントダウンして、数バイトを節約します...

i,j;f(n){for(i=0;i++<n;puts(""))for(j=0;j++<n;putchar(i^1&&j^1&&i^n&&j^n?32:35));}

少しわかりやすく、1バイト多く

i,j;f(n){for(i=0;i++<n;puts(""))for(j=0;j++<n;putchar(i==1|i==n|j==1|j==n?35:32));}

&&代わりに必要&ですか?
corvus_192

はい、論理的な&である必要があります。乗算は使用できますが、必要な括弧が多すぎます
...-cleblanc


1

PHP、81 69バイト

for($n=-1+$i=$argv[1];$i--;)echo str_pad("#",$n," #"[$i%$n<1]),"#\n";

-r;で実行 引数として入力を提供します。

DivisionByZeroErrorinput =にa をスローします1


1

R、68 70バイト

n> 1で動作します。@ Billywobが行列の配列をスワップアウトする数バイトに感謝します。

cat(rbind(b<-'#',cbind(b,matrix(' ',n<-scan()-2,n),b),b,'
'),sep='')

rbindとcbindを使用して#、スペースのn-2正方行列の周りにの行と列を配置します。改行も行にバインドされます。ソース内の改行は重要です。入力はSTDINからです


いいね!文字列内の改行が暗黙的に追加されるとは思いもしませんでした\n。ただし、matrix代わりに 使用して2バイト節約できarrayます。
ビリーウォブ

1

Common Lisp、150 130バイト

-20 @Cyoceと@AlexLに感謝します。

(defun s(v)(format t"~v,,,vA~%"v #\# #\#)(dotimes(h(- v 2))(format t"~v,,,vA~A~%"(- v 1)#\  #\# #\#))(format t"~v,,,vA"v #\# #\#))

使用法:

* (s 5)
#####
#   #
#   #
#   #
#####

基本的にformat、上下に2回使用し、その間の行にループを使用します。topおよびbottomのformat呼び出しは、sで始まり#適切な幅にパディングされた行を出力します#。間の行のフォーマット呼び出しも同様に機能しますが、パディングがスペースであり#、行の終わりにa が出力される点が異なります。

注:私はLispを初めて使用するため、これについては改善の余地がたくさんあると予想しています。


名前を付けてみませんsか?または、匿名機能ですか?
チョイス16

私はLispを知りませんが、単語とその右の開き括弧の間のスペースはすべて必要ですか?のように、それはそうでなければならdotimes (h (- v 2))ないのdotimes(h(- v 2))でしょうか?
HyperNeutrino

@AlexL。ええ、ここには多くの改善の機会があります。括弧と他の記号の間の大量の空白を削除できます。私はそれを本当に迅速に行います
人工

0

Haskell、67バイト

l#n=l<$[1..n]
f n=unlines$'#'#n:('#':' '#(n-2)++"#")#(n-2)++['#'#n]

使用例:

Prelude> putStrLn $ f 4
####
#  #
#  #
####

使い方:

l#n=l<$[1..n]                      -- helper function that makes n copies of l

   '#'#n                           -- make a string of n copies of #, followed by
                        #(n-2)     -- n-2 copies of
     '#':' '#(n-2)++"#"            -- # followed by n-2 times spaces, followed by #
                           ['#'#n] -- and a final string with n copies of #
unlines                            -- join with newlines in-between

0

ゼリー、13、バイト

,þ%µỊṀ€€ị⁾# Y

TryItOnline!または 0〜15を試してください

どうやって?

,þ%µỊṀ€€ị⁾# Y - Main link: n
 þ            - outer product with
,             -    pair:   [[[1,1],[2,1],...,[n,1]],[[1,2],[2,2],...,[n,2]], ... ,[[1,n],[2,n],...,[n,n]]]
  %           - mod n:     [[[1,1],[2,1],...,[0,1]],[[1,2],[2,2],...,[0,2]], ... ,[[1,0],[2,0],...,[0,0]]]
   µ          - monadic chain separation
    Ị         - abs(z)<=1: [[[1,1],[0,1],...,[1,1]],[[1,0],[0,0],...,[1,0]], ... ,[[1,1],[0,1],...,[1,1]]]
      €€      - for each for each
     Ṁ        - maximum:   [[1,    1,    ...,1],    [1,    0,    ..., 1],    ... ,[1,    1,    ..., 1]   ]
        ị     - index into (1 based)
         ⁾#   - "# ":      ["##...#","# ...#", ...,"##...#"]
           Y  - join with line feeds

0

ピップ、16バイト

15バイトのコード、-nフラグの場合は+1 。

(Y_Xa-2WR'#s)My

入力2以上で動作します。オンラインで試してください!

やや未使用版の説明

最初に、y文字列引数を取り、それをa-2何回も繰り返し(ここaで最初のコマンドライン入力)、結果をでラップする関数を定義します#

Y _ X a-2 WR '#
  _              Identity function
    X a-2        String-repeated by a-2
          WR '#  Wrapped in #
Y                Yank the resulting function into y

次に、この関数を2回(通常は1回、次にマップを使用して)適用し、文字列のリストとして正方形を取得します。

y M (y s)
    (y s)  Call function y with s (preinitialized to " ") as argument
y M        Map y to each character of the resulting string

入力のために4(y s)中に結果"# #"y M (y s)["####"; "# #"; "# #"; "####"]。次に、この後者の値が印刷され、-nフラグによって改行で区切られます。

ゴルフのコツ

未ゴルフからゴルフまでのバージョンを取得するには:

  • スペースを削除します。
  • Yは演算子です。つまり、式で使用できます。Y...後に続くのではなく、(ys)ただ行うことができます(Y...s)
  • 問題は、関数を再び参照する前に関数をヤンクする必要があることyです。これyM(Y_Xa-2WR'#s)は動作しません。解決策:Map演算子のオペランドを交換します。それらの1つが関数であり、もう1つが反復可能な型である限り、それらの順序は関係ありません。

0

ラケット113バイト

(let*((d display)(g(λ()(for((i n))(d"#")))))(g)(d"\n")(for((i(- n 2)))(d"#")(for((i(- n 2)))(d" "))(d"#\n"))(g))

ゴルフをしていない:

(define (f n)
  (let* ((d display)
         (g (λ () 
              (for ((i n))
                (d "#"))
              (d "\n"))))
    (g)
    (for ((i (- n 2)))
      (d "#")
      (for ((i (- n 2)))
        (d " ") )
      (d "#\n"))
    (g)))

テスト:

(f 5)

出力:

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

0

SpecBAS-57バイト

1 INPUT n: a$="#"*n,n-=2,b$="#"+" "*n+"#"#13: ?a$'b$*n;a$

?省略形ですPRINT#13必要とすることなく、文字列の末尾に上タックすることができ、キャリッジリターンで+それらを結合します。

アポストロフィは、印刷カーソルを1行下に移動します。


0

スタック、29 27バイト

「ゴルフ」言語にはかなり長い間待ち望んでいますが、その多くがどのように機能するかを忘れてしまいました:P

i_2-_u'#*N+_'#' u*'#N+++u*u

説明:

i_2-_u                           # take input and triplicate, subtracting 2 (5 -> [3,3,5])
      '#*N+_                     # create the top and bottom rows
            '#' u*'#N+++u*       # create input - 2 copies of middle rows
                          u      # rotate left 1 to get correct order, implicit output

0

C#、154 152バイト

ゴルフ:

void F(int n){Console.Write($"{new string('#',n)}\n");for(int i=2;i<n;i++)Console.Write($"#{new string(' ',n-2)}#\n");Console.Write(new string('#',n));}

ゴルフをしていない:

    void F(int n)
    {
        Console.Write($"{new string('#', n)}\n");

        for (int i = 2; i < n; i++)
            Console.Write($"#{new string(' ', n - 2)}#\n");

        Console.Write(new string('#', n));
    }

EDIT1:ループ範囲の最適化。


0

Lithp、117バイト

読みやすいように行を2つに分割:

#N::((var X (repeat "#" N))(print X)(each (seq 3 N) (scope #X::((print (+ "#" 
     (repeat " " (- N 2)) "#")))))(print X))

サンプル使用法:

% square.lithp
(
    (import "lists")
    (def s #N::((var X (repeat "#" N))(print X)(each (seq 3 N) (scope #X::((print (+ "#" (repeat " " (- N 2)) "#")))))(print X)))
    (s 10)
)

Output:
$ ./run square.lithp
##########
#        #
#        #
#        #
#        #
#        #
#        #
#        #
#        #
##########
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.