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.
Respostas:
CJam,
2220 bytesTeste 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
#
:fonte
vim,
2827 pressionamentos de teclaAssume que a entrada é fornecida como uma única linha de texto no arquivo aberto no momento.
Explicação:
Isso também pode ser executado como um "programa" como este:
O que é um pouco complicado, mas funciona.
fonte
pb - 89 bytes
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=-1
onde 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 valor0
, 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;)
fonte
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. : Dbrainfuck - 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:
fonte
K, 21 bytes
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:
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:
fonte
Pitão, 31 bytes
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.
fonte
"#"
é igual a\#
. Se você precisar concatenar muitos objetos, é melhor usarj""[
seguido de uma lista de objetos, que é igual ajk[
.s[
é igual ajk[
para matrizes de strings. Além disso, você também pode atribuirK
em tempo real, comojk[K\#
, e simplesmente largar a atribuição inicial. Atribuirlz
aJ
não ajuda se usado apenas duas vezes, então guardeJ
para outra coisa. Aqui, se você trocarZ
paraJ
você pode remover o=
. Finalmente, você pode atribuirJ
em tempo real. O código fica assim:_Js[K\#*d+2lzKb*K+4lz)jd[KzK)J
Python 3, 88 bytes
Obrigado @WorldSEnder
Exemplo de E / S:
fonte
s=" "
no começo, economiza 1 byte no geral, eu acho.;
vez de novas linhas btw? Ambos devem ter um byte, certo?Perl,
4376 bytesTransforme cada linha de entrada de texto conforme especificado:
Por exemplo:
Veja como ver o que realmente está fazendo:
Então, algo mais parecido com isto:
fonte
e
modificador ... 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\n
e são apenas 65 bytes, mais 2 para-lp
.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).
Isso é bem mais curto que minha primeira tentativa, derivada desse outro desafio :
fonte
z
como um efeito colateral?)Python 2, 74
É necessário inserir aspas como
"Hello World"
.# _ #
.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.#
multiplicadas pelo comprimento da entradaAs linhas são concatenadas e impressas.
fonte
MATLAB,
9391 bytesNão é a mais bonita, mas faz o trabalho.
Código Explicação
Passo 1
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
Declare uma matriz de caracteres com 5 sinais de hash em um vetor de coluna.
Etapa 3
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
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
fonte
Perl 5.14+,
5756 bytes54 bytes + 2 bytes para
-lp
(se a entrada não terminar em uma nova linha,-l
poderá ser descartada para salvar um byte).Aceita entrada no STDIN:
Como funciona
O núcleo do programa é uma fatia da lista:
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:Juntar esses valores
#\n#
nos dá a nossa caixa.Observe que o Perl 5.14+ é necessário para usar o
r
modificador não destrutivo no operador de transliteraçãoy///
.fonte
PHP,
9593 bytesNão é exatamente brilhante ou algo parecido, mas foi realmente divertido!
Não é exatamente bonito nem nada, mas funciona de maneira brilhante!
Obrigado a @Titus por salvar 2 bytes.
fonte
$argv
vez de$_GET
e-r
.C ++, 198 bytes
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
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.
fonte
> <> ,
106104 bytesTenho 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 .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:
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
Pilha:
[-1,t,u,p,n,i]
Linha 2: gera terceira linha de saída
Pilha:
[9,9,9,9,#, ,t,u,p,n,i, ,#]
Linha 3: Imprime a primeira linha de saída
Pilha:
[0,9,9,9,#, ,t,u,p,n,i, ,#]
Saída:
Linha 4: Imprime a segunda linha de saída
Pilha:
[0,9,9,#, ,t,u,p,n,i, ,#]
Saída (
*
representa espaço):Linha 5: Imprime a terceira linha de saída
Pilha:
[9,9,0]
Saída:
Linha 6: Configura-se para imprimir quarta e quinta linhas de saída
Pilha:
[0,9,9,0]
Linha 4: Imprima a quarta linha de saída
Pilha:
[0,9,0]
Saída (
*
representa espaço):Linha 3: Imprimir a última linha de saída
Pilha:
[0,0]
Saída:
fonte
PHP,
9391 bytesRecebe entrada do argumento da linha de comando; escapar de espaços ou usar aspas simples. Corra com
-r
.fonte
Pyke (não competitivo), 6 bytes
Experimente aqui!
Pyke foi escrito após o desafio e, portanto, não é competitivo.
.X
pega 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.fonte
05AB1E,
26 bytes, Não competindoExperimente online!
EDIT: Woah! Não percebeu que este é um velho desafio! Desculpe!
fonte
C # - 142 bytes (o corpo do método é 104)
Ungolfed:
fonte
PowerShell,
8482 bytesfonte
Lua, 90 bytes
fonte
Ruby, 83 bytes
Eu acho que poderia ser jogado ainda mais, mas como ainda não há resposta para Ruby, aqui está:
fonte
Raquete 172 bytes
Ungolfed:
Teste:
Saída:
fonte
C #,
116110 bytesUngolfed:
Versão inicial:
Programa completo com casos de teste:
fonte
var
vez destring
.var
palavra - chave permite apenas uma declaração.C (gcc) 165 bytes
Versão ungolfed
fonte
SmileBASIC, 73 bytes
fonte