文字列をハッシュで囲む


24

私はすでにPythonでこれを作成しましたが、かなり短縮できるようです:

txt = input("Type something.. ")
c = "#"
b = " "
print(c * (len(txt) + 4))
print(c, b * len(txt), c)
print(c, txt, c)
print(c, b * len(txt), c)
print(c * (len(txt) + 4))

したがって、ユーザーが次のように入力した場合:

Hello World

プログラムは次を印刷します。

###############
#             #
# Hello World #
#             #
###############


最少バイトが勝ちます。そしてもちろん、答えはどの言語でも書くことができます。




1
入力文字列には改行が含まれていませんよね?
flodel

2
@ edc65私は同意しません、この課題は大きく異なります
ベータ崩壊

10
回答を受け入れる前に少なくとも1週間待つことをお勧めします。短い提出が来た場合に受け入れられた回答を更新することを計画しているかどうかは本当に重要ではありませんが、早期に受け入れられた回答について不満を言う人もいれば、それを拒否する人もいます。回答が既に受け入れられている場合、回答の投稿に興味のない人もいます。
マーティンエンダー

回答:


17

CJam、22 20バイト

qa{4/3*' +f+W%z}8/N*

ここでテストしてください。

説明

キャラクターの2Dグリッドを1つのスペースのレイヤー(または他のキャラクター)でどのようにラップしますか 正解:4回、各行にスペースを追加し、グリッドを90度回転します。これがまさに、8つの回転でここで行っていることです:4つはスペース、4つは#

qa      e# Read the input and wrap it in an array, to make it a 2D grid.
{       e# Execute this block for each value from 0 to 7.
  4/3*  e#   Divide by 4, multiply by 3. Gives 0 for the first four iterations and
        e#   and 3 for the other four.
  ' +   e#   Add the result to a space character (space + 3 == #).
  f+    e#   Append this to each line of the grid.
  W%z   e#   Reverse the lines, then transpose the grid - together these rotate it.
}8/
N*      e# Join the lines of the grid by newlines.

1
なんて素敵なソリューションでしょう!
ジョシュバロン

1
私は説明:-D愛
ジョン・ドヴォルザーク

13

vim、28 27キーストローク

I# <esc>A #<esc>Y4PVr#G.kwv$3hr kk.

入力は、現在開いているファイル内の単一行のテキストとして提供されると想定しています。

説明:

I# <esc>        put a "#" and space at the beginning of the line
A #<esc>        put a space and "#" at the end of the line
Y4P             copy the line 4 times
Vr#             replace the entirety of the first line with "#"s
G.              do the same for the last line
kwv$3hr<space>  replace middle of the fourth line with spaces
kk.             do the same for the second line

これは、次のような「プログラム」として実行することもできます。

echo 'Hello World' | vim - '+exe "norm I# \<esc>A #\<esc>Y4PVr#G.kwv$3hr kk."'

これは少し複雑ですが、動作します。


1
これが私の答えと同じように機能するため、これが最良の答えです。
tchrist

12

pb -89バイト

v[4]w[Y!-1]{b[35]^}w[B!0]{t[B]vvv>>b[T]^^^<}v>>>w[Y!4]{b[35]v}w[X!0]{b[35]^[Y]b[35]v[4]<}

これは、pbが作成したチャレンジの一種です!この種の挑戦などに対して競争力があるわけではありません。それは今でも恐ろしいゴルフ言語です。ただし、このような課題は、他の課題よりもpbで解決する方がはるかに簡単です。pbはその出力を2Dキャンバスとして扱い、任意の座標に書き込むことができるため、テキストの配置/テキストの周りの描画(つまり、この課題)を含むものはすべて直感的に処理されます。

実行を見る:

この視覚化は、pbインタープリターであるpbiの開発中バージョンで作成されました。背景が青色の行はY=-1で、プログラムの開始時に入力が保存されます。背景が赤の長方形は、ブラシの現在の位置です。背景が黄色の長方形は、ASCII文字32(スペース)がキャンバスに明示的に書き込まれている場所です。この背景のない空白スペースには実際に値0があり、スペースに変換されます。

ここに、私がそれを書いている間に使用したコメントと、いくつかのテーマ的に関連するセクションヘッダーを含むコードを示します;)

################################
#                              #
# Handle first column oddities #
#                              #
################################
v[4]           # Start from Y=4 and go up (so we land on input afterwords)
w[Y!-1]{       # While we're on the visible part of the canvas
    b[35]^         # Write "#", then go up
}

#########################
#                       #
# Insert text of output #
#                       #
#########################

w[B!0]{        # For each character of input
    t[B]           # Save input char in T
    vvv>>          # Down 3 + right 2 = where text part of output goes
    b[T]^^^<       # Write T and go to next char
}

###############################
#                             #
# Handle last column oddities #
#                             #
###############################

v>>>           # Go to Y=0, X=(X of last text output's location + 2)
w[Y!4]{        # Until we reach the last line of output
    b[35]v         # Draw "#", then go down
}

###########################
#                         #
# Loop to finish Y=0, Y=4 #
#                         #
###########################

w[X!0]{        # Until we've gone all the way left
    b[35]^[Y]      # Print "#" at Y=4, go to Y=0
    b[35]v[4]      # Print "#" at Y=0, go to Y=4
    <              # Move left, printing until output is complete
}

3
Not that it's competitive... It's still a horrible golf language.私はそれを言います、しかし、今私は最後のために縛られています。私は最後の完全なることを期待していました。:D
地下

9

brainfuck-156バイト

++++++++++>,[>>+++++[<+++++++>-],]<....[.---<<]>>+++>>+++.---.[.>>]<<.+++.[<]>.>>+++.---.<[.>>]<<<.>>.---[<]>.--->>+++.---[.>>]<<..+++.---[<]>[+++.>>]<<....

これはおそらくゴルフ可能です。再利用のためにどこかに値を保存するのが良いのか、それともテープの他の場所から値を作り直すのが良いのかわからない場所がいくつかあります。それを理解するために仕事をする代わりに、私はそれをしませんでした。:D

コメント付き:

++++++++++>              Place a 10 (\n) at the beginning of the tape

,[>>+++++[<+++++++>-],]  Place a byte of input; place a 35 (#); repeat until end of input

<....                    Print the last cell (35; #) 4 times

[.---<<]                 Print every noninput cell on the tape in reverse (one # for each byte of input; then \n)
                         After printing each cell; decrease it by 32

>>+++                    Increase the 7 back up to 10

>>+++.---.               Increase a 32 (space) back up to 35 (#); print it; put it back to 32 and print again

[.>>]                    Print every 32 on the tape (one for each byte of input)

<<.+++.                  Print the last space again; increase it by 3 and print the resulting #

[<]>.                    Go to the beginning of the tape and print the \n

>>+++.---.               Increase a 32 (space) back up to 35 (#); print it; put it back to 32 and print again

<[.>>]                   Print every byte of input

<<<.>>.---               Print a space; then print a 35 (#} that was left behind earlier; Set it back to 32 after

[<]>.---                 Go to the beginning of the tape and print the \n; decrease by 3

>>+++.---                Set a space to #; print it; set it back to space

[.>>]                    Print all spaces

<<..+++.---              Print a space twice more; set it to #; print it again; set it back to space

[<]>                     Go to the "newline" (currently a 7 instead of 10)

[+++.>>]                 Increase by 3; print; do the same for all spaces (to set them to # before printing)

<<....                   Print the last # 4 more times

5

K、21バイト

4(|+"#",)/4(|+" ",)/,

文字列を登録し、文字列の4辺すべてにスペースを追加してから、文字列の各辺にオクトソープを追加します。動作中:

  4(|+"#",)/4(|+" ",)/,"Hello."
("##########"
 "#        #"
 "# Hello. #"
 "#        #"
 "##########")

ok、Kona、k5で動作します。

上記の冗長性を除去する長さの1文字内にはかなりのバリエーションがありますが、「ラップ」操作を2回実行するだけでも壊れないようです。

{x{|+x," #"y}/&4 4},:
{x{|+x,y}/,/4#'" #"},:
{x{|+x,y}/" #"@&4 4},:
{|+x,y}/[;" #"@&4 4],:

3

Pyth、31バイト

Js[K\#*d+2lzKb*K+4lz)_Jjd[KzK)J

さらにゴルフをする方法についてのヒントを与えてくれるコメントの人々のおかげで、私はあなたが(おそらく)話すことができるほどその言語を本当に知りません。


2
ヒントのカップル:"#"はに等しい\#。多数のオブジェクトを連結する必要がある場合は、オブジェクトj""[リストを続けて使用する方が適切ですjk[
orlp

1
さらにいくつかのヒント。文字列の配列s[と等しいjk[です。また、のKようjk[K\#にオンザフライで割り当てることもでき、最初の割り当てをドロップするだけです。に割り当てlzJも2回しか使用されない場合は役に立ちませんJ。ここで、スワップZするJ場合、を削除できます=。最後Jに、オンザフライで割り当てることができます。コードは次のようになります_Js[K\#*d+2lzKb*K+4lz)jd[KzK)J
。– PurkkaKoodari

3

Python 3、88バイト

ありがとう@WorldSEnder

s=" ";n=s+input()+s
b=len(n)
h="#";x=h*(b+2);y=h+s*b+h;z="\n"
print(x+z+y+z+h+n+h+z+y+z+x)

I / Oの例:

This is a test
##################
#                #
# This is a test #
#                #
##################

s=" "最初は全体で1バイト節約できます。
WorldSEnder

なぜ;改行の代わりに使用するのですか?両方とも1バイトである必要がありますよね?
JeromeJ

3
@JeromeJ私はそれが違いを生まないことを知っていますが、それを1行に置くと短く見えます;)
ベータ崩壊

3

Perl、43 76バイト

指定されたとおりに各テキスト入力行を変換します。

s/.*/($x=("#"x(4+($z=length))))."\n".($y="#"." "x(2+$z)."#\n")."# $& #\n$y$x"/e

例えば:

echo surround a long string with pounds | 
perl -ple's/.*/($x=("#"x(4+($z=length))))."\n".($y="#"." "x(2+$z)."#\n")."# $& #\n$y$x"/e' 
######################################
#                                    #
# surround a long string with pounds #
#                                    #
######################################

実際に何をしているのかを確認する方法は次のとおりです。

perl -MO=Deparse,-p,-q,-x9 -ple '($x=("#"x(4+($z=length))))."\n".($y="#"." "x(2+$z)."#\n")."# $& #\n$y$x";'
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined(($_ = <ARGV>))) {
    chomp($_);
    (((($x = ('#' x (4 + ($z = length($_))))) . "\n") . ($y = (('#' . (' ' x (2 + $z))) . "#\n"))) . (((('# ' . $&) . " #\n") . $y) . $x));
}
continue {
    (print($_) or die((('-p destination: ' . $!) . "\n")));
}
-e syntax OK

そのため、次のようになります。

((  
      (($x =  ('#' x (4 + ($z = length($_))))) . "\n")
    .  ($y = (('#' . (' ' x (2 + $z))) . "#\n"))
  )  
    .  (((('# ' . $&) . " #\n") . $y) . $x)
)   

文字列の前後に空白のパディングの行があるはずです。質問からの出力例を見てください...しかし、あなたが提出するのを見るのは素晴らしいです...特にPerlで:D
rayryeng-モニカを復活させる

@rayryeng誰もPerlで投稿していないのが悲しかった。
tchrist

正直に言って、私は驚いた。これは確かにそれに適した問題のように思えます:)。
rayryeng-モニカの復元15年

@rayryengは次のリリースで修正されました。:)
tchrist

1
実際に考えてみると、すべてを個別のステートメントに分割する場合、それらを置換の外側に移動してe修飾子をドロップすることができます...しかし、そうする場合は、置換を完全にドロップすることもできます:$x="#"x(4+($z=y!!!c));$y="#".$"x(2+$z)."#\n";$_="$x\n$y# $_ #\n$y$x"。代わりに実際の改行を使用してください。\nこれはたった65バイトで、さらに2バイトです-lp
ThisSuitIsBlackNot

2

JavaScript(ES6)、73

テンプレート文字列を多用すると、2つの改行は重要でカウントされます。

EcmaScript 6準拠のブラウザー(FireFoxおよび最新のChrome、おそらくSafari)で以下のスニペットを実行してテストします。

f=s=>(z=c=>`*${c[0].repeat(s.length+2)}*
`)`*`+z` `+`* ${s} *
`+z` `+z`*`

// Less golfed

U=s=>(
  z=c=>'*' + c.repeat(s.length+2) + '*\n',
  z('*') + z(' ') + '* ' + s + ' *\n' + z(' ') + z('*')
)

// TEST

O.innerHTML=f('Hello world!')
<pre id=O></pre>

これは、この他の課題から導き出された最初の試行よりもかなり短いです:

f=s=>(q=(c,b,z=c.repeat(b[0].length))=>[z,...b,z].map(r=>c+r+c))('*',q(' ',[s])).join`\n`

私のために実行されません(カナリア)。
mınxomaτ

@minxomatカナリアとは何ですか?
edc65

Chrome 45.0.2454.85 m、Windows 7
edc65

Canaryは常に最新のChromeビルドです。Chrome Stableでも動作しません。編集:FireFoxでも動作します。
mınxomaτ

z副作用としてグローバルに割り当てることは合法ですか?)
ニール

2

Python 2、74

s='# %s #'%input()
n=len(s)
b='\n#'+' '*(n-2)+'#\n'
print'#'*n+b+s+b+'#'*n

のような引用符で入力を取ります"Hello World"

  • 3行目は、 # _ #です。
  • 2行目と4行目b# #すべての4つの改行の世話をするためにどちらかの側に改行で囲まれた空間の右の数、と。
  • 1行目と5行目#は、入力の長さに乗算されます

行は連結されて印刷されます。


2

MATLAB、93 91バイト

最もきれいではありませんが、仕事は完了です。

t=[32 input('','s') 32];m='#####'.';n=repmat('# ',numel(t),1)';disp([m [n;t;flipud(n)] m])

コードの説明

ステップ1

t=[32 input('','s') 32];

STDINから文字列を読み取り、その中に先頭と末尾の単一スペースを配置します。32はスペースのASCIIコードであり、文字列タイプとして入力を読み取ると、32がスペースに合体します。

ステップ2

m='#####'.';

列ベクトルで5つのハッシュ記号の文字配列を宣言します。

ステップ#3

n=repmat('# ',numel(t),1)'

最初にハッシュ記号、その後に空白が続く2行の文字行列を作成します。文字数は、入力文字列の長さに2を加えたものであるため、文字列の前後のスペースに対応できます。

ステップ#4

disp([m [n;t;flipud(n)] m])

すべてをつなぎ合わせます。5つのハッシュの最初の列を配置し、次に中央部分と5つのハッシュの別の列を配置します。中央部分は、ステップ#3で作成された2行の文字行列、末尾と先頭のスペースを持つ入力文字列自体、それに続く2行の文字行列で構成されますが、逆になります。

実行例

>> t=[32 input('','s') 32];m='#####'.';n=repmat('# ',numel(t),1)';disp([m [n;t;flipud(n)] m])
This is something special for you
#####################################
#                                   #
# This is something special for you #
#                                   #
#####################################
>> t=[32 input('','s') 32];m='#####'.';n=repmat('# ',numel(t),1)';disp([m [n;t;flipud(n)] m])
Hello World
###############
#             #
# Hello World #
#             #
###############
>> t=[32 input('','s') 32];m='#####'.';n=repmat('# ',numel(t),1)';disp([m [n;t;flipud(n)] m])
I <3 Code Golf StackExchange!
#################################
#                               #
# I <3 Code Golf StackExchange! #
#                               #
#################################

2

Perl 5.14 +、57 56バイト

perl -lpe '$_=join"#
#",($_=" $_ ",y// /cr,"#".y//#/cr)[2,1,0..2]'

54バイト+ 2バイト-lp(入力が改行で終わらない場合、-lドロップして1バイトを節約できます)。

STDINで入力を受け入れます。

$ echo Hello World | perl -lpe '$_=join"#
#",($_=" $_ ",y// /cr,"#".y//#/cr)[2,1,0..2]'
###############
#             #
# Hello World #
#             #
###############

使い方

プログラムの中核はリストスライスです。

($_=" $_ ",y// /cr,"#".y//#/cr)[2,1,0..2]'

これにより、出力の3つの一意の行を格納するコンパクトな方法が提供されます(境界ボックスの最初の2行は最後の2行と同じで、ミラーリングされているだけです)。入力文字列のfoo場合、スライスの結果は次のようになります。

index   value
--------------
  2    "######"
  1    "     "
  0    " foo "
  1    "     "
  2    "######"

これらの値を結合すると#\n#、ボックスが得られます。

r音訳演算子に非破壊修飾子を使用するには、Perl 5.14+が必要であることに注意してくださいy///


2

PHP、95 93バイト

必ずしも素晴らしいとは限りませんが、実際には楽しかったです!

$l=strlen($s=" $argv[1] ");printf("#%'#{$l}s#
#%1\${$l}s#
#$s#
#%1\${$l}s#
#%1\$'#{$l}s#",'');

必ずしもきれいではありませんが、見事に機能します!


2バイトを節約してくれた@Titusに感謝します。


およびの$argv代わりに2バイトを保存できます。$_GET-r
タイタス

1

C ++、198バイト

#include <iostream>
#include <string>
int i;int main(){std::string t,n,o;std::getline(std::cin,o);t="\n#";o="# "+o+" #";for(;i<o.size();i++){n+="#";if(i>1)t+=" ";}t+="#\n";std::cout<<n+t+o+t+n;}

codegolfでの最初の突き刺しで、C ++はゴルフに最適な言語ではないかもしれないと学びましたが、最初の試みではちゃんと(?)したと感じました。

非ゴルフ

#include <iostream>
#include <string>

int i;                              //globals default to a value of 0

int main()
{
    std::string t, n, o;
    std::getline(std::cin, o);

    t = "\n#";                      // t needs hashes at start and end, places hash at start here
    o = "# " + o + " #";            // put hash at each end of input

    for(; i < o.size(); i++) {
        n += "#";                   // fills n with hashes
        if(i > 1) {
            t += " ";               // fill t with spaces between hashes, has two fewer spaces than n has hashes
        }
    }
    t += "#\n";                     // puts final hash at end of t

    std::cout << n + t + o + t + n; // final output
}

n、o、およびtは、完全にハッシュ化された行、入力(両端にハッシュがある)、および入力とハッシュ化された行の間の行をそれぞれ表します。


1

> <>106 104バイト

> <>はこれに最適な言語ではないかもしれないという気がしますが、私はこれを投稿してあきらめずに投稿することはできません。*4行目の末尾には、スペースことになっています。このコードがどれほど信じられないほどグロテスクに見えるか好きではありませんか?オンラインでお試しください。

<v?(0:i
v>~" ## "}}l:::
>"#"o1-:?!v02.>~a"#"oo
"-2ooa"#"~<.31v!?:-1o" 
7v?=3loroo"#"a<.4
.>";^"e3pa2p093

これは、ポインターがどのように移動するかを示すために、方向変換器以外のバージョンはありません(「テレポート」ステートメント、つまりを省略していることに注意してください.)。

方向の流れ:

<v
v>
>         v   >
          <   v 
 v            <
 >           

説明

スタックの視覚化は、入力に基づいて行われますinput。> <>は2次元の言語です。そのため、ポインターはその下でコードを実行するため(このコードでは)<>v^は主に方向を変更するために使用されます)。ポインターが始まるところから説明を始めます。ポインターは5行目から後方に移動するため、2行繰り返されることに注意してください。

私がいつもクールだと思うのは、独自のソースコードを変更する機能です。このプログラムでそれを利用しています。3行目と4行目は、それぞれの文字を変更して最後の2行を印刷するために再利用されます。

行1:入力ループ

<v?(0:i
<        change direction to left
   (0:i  checks if input is less than 0 (no input defaults to -1)
 v?      change direction to down if so

スタック: [-1,t,u,p,n,i]


2行目出力の3行目を生成します

v>~" ## "}}l:::  
 >~" ## "}}      remove -1 (default input value) from stack and pads with # and spaces
           l:::  push 4 lengths of padded input

スタック: [9,9,9,9,#, ,t,u,p,n,i, ,#]


行3:出力の最初の行を印刷します

>"#"o1-:?!v02.>~a"#"oo
>"#"o                   print "#"
     1-                 subtract 1 from length (it's at the top of the stack)
       :?!v             move down if top of stack is 0

スタック: [0,9,9,9,#, ,t,u,p,n,i, ,#]

出力:

#########

行4:出力の2行目を印刷します

"-2ooa"#"~<.31v!?:-1o"*
 -2ooa"#"~<              pops 0, prints newline, "#", then decrements length by 2
"                   o"*  prints space (* is supposed to be space char)
                  -1     decrements top of stack
           .31v!?:       changes direction to down if top of stack is 0, else jumps back to "

スタック: [0,9,9,#, ,t,u,p,n,i, ,#]

出力(*スペースを表す):

#########
#*******

5行目出力の3行目を出力します

7v?=3loroo"#"a<.4
        oo"#"a<    prints "#",newline
       r           reverses stack
7v?=3lo        .4  outputs until stack has 3 values, then changes direction to down

スタック: [9,9,0]

出力:

#########
#       #
# input #

6行目: 4行目と5行目の出力を印刷するように設定します

.>";^"e3pa2p093
 >";^"           push ";",then "^"
      e3p        place "^" as the fifteenth character on line 4
         a2p     place ";" as the eleventh character on line 3
            0    push a value (value doesn't matter -- it will be deleted)
.            93  jump to the tenth character on line 4

スタック: [0,9,9,0]


行4:出力の4行目を印刷する

"-2ooa"#"~<.31^!?:-1o"*
   ooa"#"~<              delete 0 (unnecessary value pushed), then print newline,"#"
 -2                      subtract two from value on top of stack (length)
"          .31^!?:-1o"*  print space until top of stack is 0, then change direction to up

スタック: [0,9,0]

出力(*スペースを表す):

#########
#       #
# input #
#*******

行3:出力の最終行を印刷する

"#"o1-:?!;02.>~a"#"oo
             >~a"#"oo  pop top of stack, print "#", newline
"#"o1-:?!;02.          print "#" until top of stack is 0, then terminate

スタック: [0,0]

出力:

#########
#       #
# input #
#       #
#########

1

PHP、93 91バイト

$b=str_pad("",$e=strlen($s=" $argv[1] "));echo$h=str_pad("",2+$e,"#"),"
#$b#
#$s#
#$b#
$h";

コマンドライン引数から入力を受け取ります。スペースをエスケープするか、単一引用符を使用します。で実行し-rます。


1

Pyke(非競合)、6バイト

.X".X#

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

Pykeはチャレンジ後に書かれたため、競争力がありません。

.X"    - surround string in spaces
   .X# - surround string in hashes

.X文字列と文字列定数argを取り、その文字グループで文字列を囲みます。定数argは最大8文字で、文字列の囲まれ方にさまざまな影響を与えます。



1

C#-142バイト(メソッド本体は104)

class P{static void Main(string[]a){for(int i=0;++i<6;)System.Console.Write("#{0}#\n",i==3?$" {a[0]} ":new string(" #"[i%2],a[0].Length+2));}}

ゴルフをしていない:

class P
{
    static void Main(string[] a)
    {
        for (int i = 0; ++i < 6;)
            System.Console.Write("#{0}#\n", i == 3 ? $" {a[0]} " : new string(" #"[i%2], a[0].Length + 2));
    }
}



0

Ruby、83バイト

さらにゴルフができると思いますが、Rubyの答えはまだないので、ここにあります:

s=ARGV[0]
n=s.size
r="#"*(n+4)
t="\n#"+" "*(n+2)+"#\n"
puts r+t+"\n# "+s+" #\n"+t+r

0

ラケット172バイト

(λ(s)(let((n(string-length s))(p #\space)(g(λ(l c)(make-string l c))))(display(string-append
(g(+ 4 n)#\#)"\n#"(g(+ 2 n)p)"#\n# "s" #\n#"(g(+ 2 n)p)"#\n"(g(+ 4 n)#\#)))))

ゴルフをしていない:

(define (f s)
  (let ((n (string-length s))
        (p #\space)
        (g (λ (l c) (make-string l c))))
    (display (string-append (g (+ 4 n) #\#)
                            "\n#"
                            (g (+ 2 n) p)
                            "#\n# "
                            s
                            " #\n#"
                            (g (+ 2 n) p)
                            "#\n"
                            (g (+ 4 n) #\#)
                            ))))

テスト:

(f "This is a test" )

出力:

##################
#                #
# This is a test #
#                #
##################

0

C#、116 110バイト

s=>{string r="\n".PadLeft(s.Length+5,'#'),p="#".PadRight(s.Length+3,' ')+"#\n";return r+p+"# "+s+" #\n"+p+r;};

ゴルフをしていない:

s=>
{
    string r = "\n".PadLeft(s.Length + 5, '#'),         //the first line, made of '#'s
        p = "#".PadRight(s.Length + 3, ' ') + "#\n";    //the second line
    return r + p + "# " + s + " #\n" + p + r;           //output is simmetrical
};

初期バージョン:

s=>{int l=s.Length;string r=new string('#',l+4)+"\n",p="#"+new string(' ',l+2)+"#\n";return r+p+"# "+s+" #\n"+p+r;};

テストケースを含む完全なプログラム:

using System;

namespace SurroundStringWithHashes
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<string,string>f= s=>{int l=s.Length;string r=new string('#',l+4)+"\n",p="#"+new string(' ',l+2)+"#\n";return r+p+"# "+s+" #\n"+p+r;};

            Console.WriteLine(f("Hello World"));
            Console.WriteLine(f("Programming Puzzles & Code Golf"));
        }
    }
}

var代わりに使用しますstring
-Yytsi

この場合、2つの文字列があり、各varキーワードで宣言できるのは1つだけなので、役に立ちません。
adrianmp

おっと、2番目は表示されませんでした:D
Yytsi

0

C(gcc)165バイト

f(*s){i,j;c='#';for(j=0;j<5;j++){if(j==0||j==4){for(i=0;i<strlen(s)+2;i++)printf("#");}else if(j==2) printf("#%s#",s);else printf("#%*c",(strlen(s)+1),c);puts("");

ゴルフされていないバージョン

void  f(char *s)
{
    int i,j;
    char c='#';

    for(j=0;j<5;j++)
    { 
       if(j==0||j==4)
       { 
         for(i=0;i<strlen(s)+2;i++)
           printf("#");
       }
       else
        if(j==2)
         printf("#%s#",s);
      else
        printf("#%*c",(int)(strlen(s)+1),c);

   puts("");
}

0

SmileBASIC、73バイト

LINPUT S$L=LEN(S$)+2O$="#"+" "*L+"#
T$="#"*(L+2)?T$?O$?"# ";S$;" #
?O$?T$
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.