Coloque uma corda com hashes


24

Eu já fiz isso em Python, mas parece que poderia ser muito reduzido:

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

Portanto, se o usuário digitar:

Hello World

O programa imprime:

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


Menos bytes ganha - e, é claro, a resposta pode ser escrita em qualquer idioma.




11
A string de entrada não conterá quebras de linha, certo?
flodel

2
@ edc65 eu discordo, este desafio é muito diferente
Beta Decay

10
Eu recomendaria esperar pelo menos uma semana antes de aceitar uma resposta. Embora realmente não importe se você está planejando atualizar a resposta aceita, caso um envio mais curto seja recebido, haverá pessoas reclamando de uma resposta aceita com antecedência ou até mesmo o voto negativo. Também haverá pessoas que não estarão interessadas em postar uma resposta, se já houver uma resposta aceita.
Martin Ender

Respostas:


17

CJam, 22 20 bytes

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

Teste aqui.

Explicação

Como você quebra uma grade 2D de caracteres em uma camada de espaços (ou qualquer outro caractere)? Correto: quatro vezes, você acrescenta um espaço a cada linha e gira a grade 90 graus. É exatamente o que estou fazendo aqui com oito rotações: quatro para espaços, quatro para #:

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.

11
Que solução legal!
Joshpbarron 13/09/2015

11
Eu amo o :-D explicação
John Dvorak

13

vim, 28 27 pressionamentos de tecla

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

Assume que a entrada é fornecida como uma única linha de texto no arquivo aberto no momento.

Explicação:

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

Isso também pode ser executado como um "programa" como este:

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

O que é um pouco complicado, mas funciona.


11
Esta é a melhor resposta, porque funciona como minha mente.
tchrist

12

pb - 89 bytes

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]<}

Esse é o tipo de desafio para o qual o pb foi criado! Não que seja competitivo para esse tipo de desafio ou algo assim. Ainda é uma linguagem horrível para o golfe. No entanto, desafios como esse são muito menos difíceis de resolver em pb do que outros. Como o pb trata sua saída como uma tela 2D e é capaz de gravar em quaisquer cordas, qualquer coisa que envolva o posicionamento de texto / desenho em torno do texto (ou seja, esse desafio) é tratada de maneira bastante intuitiva.

Preste atenção:

Essa visualização foi criada com uma versão em desenvolvimento do pbi, o interpretador pb. A linha com fundo azul é Y=-1onde a entrada é armazenada quando o programa é iniciado. O retângulo com fundo vermelho é o local atual do pincel. Os retângulos com fundo amarelo estão em qualquer lugar onde o caractere ascii 32 (um espaço) é explicitamente gravado na tela. Qualquer espaço em branco sem esse plano de fundo realmente possui o valor 0, que é convertido em um espaço.

Aqui está o código com os comentários que eu usei enquanto escrevia, com alguns cabeçalhos de seção temáticos relevantes;)

################################
#                              #
# 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.Eu digo isso, mas agora só estou empatado por último. Eu estava esperando ser o último diretamente. : D
undergroundmonorail

9

brainfuck - 156 bytes

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

Isso provavelmente é jogável. Há lugares em que eu não sabia se seria melhor armazenar um valor em algum lugar para reutilizá-lo ou refazê-lo / buscá-lo em outro lugar da fita. Em vez de fazer o trabalho para descobrir, eu não fiz isso. : D

Com comentários:

++++++++++>              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 bytes

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

Aliste a sequência, adicione um espaço aos quatro lados de uma sequência e adicione um octothorpe a cada lado da sequência. Em ação:

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

Trabalha em oK, Kona e k5.

Existem algumas variações dentro de um caractere de comprimento que removem a redundância acima, mas nenhuma parece quebrar mesmo quando precisamos executar a operação "wrap" duas vezes:

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

3

Pitão, 31 bytes

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

Graças às pessoas nos comentários que dão dicas de como jogar golfe, eu realmente não conheço bem o idioma, como você pode (provavelmente) saber.


2
Algumas dicas: "#"é igual a \#. Se você precisar concatenar muitos objetos, é melhor usar j""[seguido de uma lista de objetos, que é igual a jk[.
orlp

11
Mais algumas dicas. s[é igual a jk[para matrizes de strings. Além disso, você também pode atribuir Kem tempo real, como jk[K\#, e simplesmente largar a atribuição inicial. Atribuir lza Jnão ajuda se usado apenas duas vezes, então guarde Jpara outra coisa. Aqui, se você trocar Zpara Jvocê pode remover o =. Finalmente, você pode atribuir Jem tempo real. O código fica assim:_Js[K\#*d+2lzKb*K+4lz)jd[KzK)J
PurkkaKoodari

3

Python 3, 88 bytes

Obrigado @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)

Exemplo de E / S:

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

s=" "no começo, economiza 1 byte no geral, eu acho.
WorldSEnder 13/09/15

Por que usar em ;vez de novas linhas btw? Ambos devem ter um byte, certo?
precisa saber é o seguinte

3
@ JeromeJ Eu sei que não faz diferença, mas parece mais curto se você colocá-lo em uma linha;)
Decay Beta

3

Perl, 43 76 bytes

Transforme cada linha de entrada de texto conforme especificado:

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

Por exemplo:

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

Veja como ver o que realmente está fazendo:

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

Então, algo mais parecido com isto:

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

Deve haver uma linha de preenchimento de espaço em branco antes e depois da sequência. Dê uma olhada no exemplo de saída a partir da pergunta .... mas bom vê-lo submeter ... especialmente em Perl: D
rayryeng - Reintegrar Monica

@rayryeng Fiquei triste por ninguém estar enviando no Perl.
tchrist 13/09/2015

Para ser sincero, fiquei surpreso. Isso certamente parece ser um problema adequado para ele :).
rayryeng - Restabelece Monica

@rayryeng Corrigido na próxima versão. :)
tchrist

11
Na verdade, agora que penso nisso, se você dividir tudo em declarações separadas, você pode simplesmente movê-los fora da substituição e soltar o emodificador ... mas se você fizer isso, você pode muito bem cair a substituição por completo: $x="#"x(4+($z=y!!!c));$y="#".$"x(2+$z)."#\n";$_="$x\n$y# $_ #\n$y$x". Use novas linhas reais em vez de \ne são apenas 65 bytes, mais 2 para -lp.
precisa saber é o seguinte

2

JavaScript (ES6), 73

Usando intensamente a sequência de modelos, as duas novas linhas são significativas e contadas.

Teste a execução do snippet abaixo em qualquer navegador compatível com EcmaScript 6 (FireFox e Chrome mais recente, talvez 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>

Isso é bem mais curto que minha primeira tentativa, derivada desse outro desafio :

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

Não corre para mim (Canárias).
mınxomaτ

@minxomat o que é Canárias?
Edc65 13/09/2015

Funciona no Chrome 45.0.2454.85 m, Windows 7
edc65

Canary é sempre a versão mais recente do Chrome . Também não funciona no meu Chrome Stable. Edit: Funciona no FireFox embora.
mınxomaτ

(É legal para atribuir ao global zcomo um efeito colateral?)
Neil

2

Python 2, 74

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

É necessário inserir aspas como "Hello World".

  • A terceira linha é a entrada inserida # _ #.
  • A segunda e a quarta linhas b estão # #com o número certo de espaços, cercadas por novas linhas de cada lado para cuidar de todas as quatro novas linhas.
  • A primeira e a quinta linhas são #multiplicadas pelo comprimento da entrada

As linhas são concatenadas e impressas.


2

MATLAB, 93 91 bytes

Não é a mais bonita, mas faz o trabalho.

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

Código Explicação

Passo 1

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

Leia uma sequência de caracteres de STDIN e coloque um espaço à esquerda e à direita dentro dela. 32 é o código ASCII para um espaço e a leitura na entrada como um tipo de sequência que une os 32s em espaços.

Passo 2

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

Declare uma matriz de caracteres com 5 sinais de hash em um vetor de coluna.

Etapa 3

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

Crie uma matriz de caracteres de 2 linhas preenchida por sinais de hash primeiro e depois por espaço em branco depois. O número de caracteres é o comprimento da sequência de entrada mais 2, para que possamos acomodar o espaço antes e depois da sequência.

Passo 4

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

Nós vamos juntar tudo. Colocamos a primeira coluna de 5 hashes, seguida pela parte central e seguida por outra coluna de 5 hashes. A parte central consiste na matriz de caracteres de 2 linhas criada na Etapa 3, a própria cadeia de entrada que possui um espaço à direita e à esquerda, seguida pela matriz de caracteres de 2 linhas, mas invertida.

Execuções de exemplo

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

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

54 bytes + 2 bytes para -lp(se a entrada não terminar em uma nova linha, -lpoderá ser descartada para salvar um byte).

Aceita entrada no STDIN:

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

Como funciona

O núcleo do programa é uma fatia da lista:

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

Isso fornece uma maneira compacta de armazenar as três linhas exclusivas da saída (as duas primeiras linhas da caixa delimitadora são as mesmas que as duas últimas, apenas espelhadas). Para a sequência de entrada foo, os resultados da fatia seriam:

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

Juntar esses valores #\n#nos dá a nossa caixa.

Observe que o Perl 5.14+ é necessário para usar o rmodificador não destrutivo no operador de transliteração y///.


2

PHP, 95 93 bytes

Não é exatamente brilhante ou algo parecido, mas foi realmente divertido!

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

Não é exatamente bonito nem nada, mas funciona de maneira brilhante!


Obrigado a @Titus por salvar 2 bytes.


Você pode salvar dois bytes usando em $argvvez de $_GETe -r.
Titus

1

C ++, 198 bytes

#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;}

Minha primeira tentativa no codegolf e, embora eu tenha aprendido C ++ provavelmente não é a melhor linguagem para jogar golfe, senti que decentei (?) Na minha primeira tentativa.

Ungolfed

#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 e t representam as linhas com hash completo, a entrada (com hashes em cada extremidade) e as linhas entre a entrada e as linhas de hash, respectivamente.


1

> <> , 106 104 bytes

Tenho a sensação de que> <> pode não ser o melhor idioma para isso, mas cheguei longe demais para desistir e não postar isso. O *final da linha 4 deve ser um espaço. Você não ama o quão incrivelmente grotesco esse código parece? Experimente online .

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

Aqui está uma versão sem nada além de trocadores de direção para dar uma idéia de como o ponteiro se move (observe que deixei de fora as instruções de "teleporte", ou seja, . ).

Fluxo de direção:

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

Explicação

Minha visualização da pilha será baseada na entrada input. > <> é uma linguagem bidimensional, portanto, preste atenção ao local em que o ponteiro está se movendo entre as linhas, pois ele executa o código abaixo dele (neste código<>v^ são usados ​​principalmente para mudar de direção). Vou começar minhas explicações de onde o ponteiro começa. Observe que haverá duas linhas repetidas, à medida que o ponteiro se move para trás após a quinta linha.

O que eu sempre acho interessante em> <> é a capacidade de modificar seu próprio código-fonte, e eu o uso neste programa. As linhas 3 e 4 são reutilizadas para imprimir as duas últimas linhas através da modificação de um caractere em cada uma.

Linha 1: loop de entrada

<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

Pilha: [-1,t,u,p,n,i]


Linha 2: gera terceira linha de saída

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

Pilha: [9,9,9,9,#, ,t,u,p,n,i, ,#]


Linha 3: Imprime a primeira linha de saída

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

Pilha: [0,9,9,9,#, ,t,u,p,n,i, ,#]

Saída:

#########

Linha 4: Imprime a segunda linha de saída

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

Pilha: [0,9,9,#, ,t,u,p,n,i, ,#]

Saída ( *representa espaço):

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

Linha 5: Imprime a terceira linha de saída

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

Pilha: [9,9,0]

Saída:

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

Linha 6: Configura-se para imprimir quarta e quinta linhas de saída

.>";^"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

Pilha: [0,9,9,0]


Linha 4: Imprima a quarta linha de saída

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

Pilha: [0,9,0]

Saída ( *representa espaço):

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

Linha 3: Imprimir a última linha de saída

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

Pilha: [0,0]

Saída:

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

1

PHP, 93 91 bytes

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

Recebe entrada do argumento da linha de comando; escapar de espaços ou usar aspas simples. Corra com -r.


1

Pyke (não competitivo), 6 bytes

.X".X#

Experimente aqui!

Pyke foi escrito após o desafio e, portanto, não é competitivo.

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

.Xpega uma string e uma constante de string arg e envolve uma string com esse grupo de caracteres. O argumento constante pode ter até 8 caracteres e ter efeitos diferentes sobre como a string é circundada.


1

05AB1E, 26 bytes , Não competindo

g4+'#ש,¹' .ø'#.ø,®,

Experimente online!

EDIT: Woah! Não percebeu que este é um velho desafio! Desculpe!


1

C # - 142 bytes (o corpo do método é 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));}}

Ungolfed:

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

PowerShell, 84 82 bytes

$l=$input.length+4;$p='#'*$l;$s=' '*$l;$p,$s,"  $input  ",$s,$p-replace'^ | $','#'

0

Lua, 90 bytes

a=arg[1]h="#"s=" "t="\n"..h c=h:rep(#a+4)..t..s:rep(#a+2)..h..t..s print(c..a..c:reverse())

0

Ruby, 83 bytes

Eu acho que poderia ser jogado ainda mais, mas como ainda não há resposta para Ruby, aqui está:

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

0

Raquete 172 bytes

(λ(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)#\#)))))

Ungolfed:

(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) #\#)
                            ))))

Teste:

(f "This is a test" )

Saída:

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

0

C #, 116 110 bytes

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

Ungolfed:

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
};

Versão inicial:

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;};

Programa completo com casos de teste:

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"));
        }
    }
}

Use em varvez de string.
Yytsi 8/10/16

Não ajudará nesse caso, pois tenho duas cadeias e cada varpalavra - chave permite apenas uma declaração.
adrianmp

Opa, não vi o segundo: D
Yytsi 9/10/16

0

C (gcc) 165 bytes

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("");

Versão ungolfed

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 bytes

LINPUT S$L=LEN(S$)+2O$="#"+" "*L+"#
T$="#"*(L+2)?T$?O$?"# ";S$;" #
?O$?T$
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.