Обведіть рядок хешами


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
Рядок введення не буде містити рядкових рядків, правда?
флодель

2
@ edc65 Я не погоджуюся, цей виклик сильно відрізняється
бета-розпад

10
Я б рекомендував почекати принаймні тиждень, перш ніж приймати відповідь. Хоча це не має особливого значення, якщо ви плануєте оновити прийняту відповідь, якщо надійде коротше подання, люди знайдуть скарги на ранньо прийняту відповідь або навіть спростують її. Також знайдуться люди, яким не буде цікаво публікувати відповідь, якщо вона вже є прийнятою.
Мартін Ендер

Відповіді:


17

CJam, 22 20 байт

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

Перевірте це тут.

Пояснення

Як ви загортаєте двовимірну сітку символів в один шар пробілів (або будь-який інший символ)? Правильно: чотири рази ви додаєте пробіл до кожного рядка, а потім обертаєте сітку на 90 градусів. Саме так я і роблю тут вісім обертів: чотири для пробілів, чотири для #:

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 розглядає свої результати як двовимірне полотно і вміє писати на будь-які координати, все, що стосується розміщення тексту / малювання навколо тексту (тобто це завдання), обробляється досить інтуїтивно.

Дивіться, як вона працює:

Ця візуалізація була створена за допомогою розробленої версії pbi, інтерпретатора pb. Рядок із синім фоном - це місце 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

мозковий ебать - 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

К, 21 байт

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

Зарахуйте рядок, додайте пробіл до всіх чотирьох сторін рядка, а потім додайте октоторп до кожної сторони рядка. Дія:

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

Працює в oK, Kona та k5.

Існує досить багато варіацій в межах одного символу довжини, які видаляють надмірність у вищевказаному, але, здається, жодна з них не порушується навіть тоді, коли нам потрібно виконати операцію "обгортання" лише двічі:

{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\#, і просто відкиньте початкове призначення. Призначення lzна Jне допомагає , якщо використовується тільки два рази, так що зберегти 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)

Приклад вводу / виводу:

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

s=" " на початку, я думаю, що 1 байт загалом думаю.
WorldSEnder

Навіщо використовувати ;замість нових рядків btw? Обидва повинні бути одним байтом, правда?
JeromeJ

3
@JeromeJ Я знаю, що це не має значення, але це виглядає коротше, якщо розмістити його на одній лінії;)
бета-версія занепаду

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

@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

Двома новинками, які сильно використовують шаблон рядка, є значущими і рахуються.

Випробуйте запуск фрагмента нижче в будь-якому веб-переглядачі, сумісному з 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 м, Windows 7
edc65

Canary завжди є найновішою версією Chrome . Не працює і в моєму Chrome Stable. Правка: Хоча працює у FireFox.
mınxomaτ

(Чи законно призначати глобальне zяк побічний ефект?)
Ніл

2

Пітон 2, 74

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

Приймає введення на зразок цитат "Hello World".

  • Третій рядок - це вкладений вхід # _ # .
  • Другий і четвертий рядки b є# # з правого ряду просторів, оточених символами нового рядка в обидві сторони , щоб піклуватися про всіх чотирьох нових рядків.
  • Перший і п'ятий рядки #множать на довжину введення

Рядки з'єднані та надруковані.


2

МАТЛАБ, 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 хешей. Центральна частина складається з 2-х рядкових матриць символів, створених на кроці №3, самого вхідного рядка, який має кінцевий і провідний простір, за яким слідує 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можна скинути, щоб зберегти один байт).

Приймає вхід на 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]'

Це забезпечує компактний спосіб зберігання трьох унікальних рядків виводу (перші два ряди обмежувальної коробки такі ж, як і останні два, лише дзеркальні). Для вхідного рядка fooрезультати зрізу будуть такими:

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

Приєднання цих цінностей #\n#дає нам наш ящик.

Зауважте, що Perl 5.14+ потрібен для використання неруйнівного rмодифікатора для оператора транслітерації y///.


2

PHP, 95 93 байт

Не зовсім блискуче чи щось подібне, але насправді було весело!

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

Не зовсім красиво чи нічого, але це працює чудово!


Завдяки @Titus за збереження 2-х байт.


Ви можете зберегти два байти, використовуючи $argvзамість $_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;}

Мій перший удар в кодогольф, і, хоча я вивчив 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. > <> - двовимірна мова, тому зверніть увагу на те, де вказівник рухається між рядками, оскільки він виконує код під ним (у цьому коді<>v^ в основному використовується для зміни напрямку). Я розпочну свої пояснення з того місця, де починається покажчик. Зауважте, що буде повторюватися дві лінії, оскільки вказівник рухається назад після п’ятого рядка.

Те, що мені завжди цікаво, є його здатність змінювати власний вихідний код, і я використовую його в цій програмі. Рядки 3 та 4 повторно використовуються для друку останніх двох рядків шляхом модифікації символів у кожному.

Рядок 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: Створює третій рядок виводу

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: Друкує другий рядок виводу

"-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: друкує третій рядок виводу

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: Налаштовує на друк четвертого та п'ятого рядків виводу

.>";^"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: Роздрукуйте четвертий рядок виводу

"-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

Пайк (неконкурентоспроможний), 6 байт

.X".X#

Спробуйте тут!

Пайк був написаний після виклику і тому є неконкурентоспроможним.

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

.Xприймає рядок та рядковий констант 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

Рубін, 83 байти

Я здогадуюсь, що можна було б пограти в гольф далі, але оскільки відповіді на Рубі ще немає, ось це:

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ключове слово дозволяє лише одне оголошення.
adrianmp

На жаль, другого не бачили: 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$
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.