Ya hice esto en Python, pero parece que podría acortarse mucho:
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))
Entonces, si el usuario escribe:
Hello World
El programa imprime:
###############
# #
# Hello World #
# #
###############
Pocos bytes ganan, y por supuesto, la respuesta se puede escribir en cualquier idioma.
Respuestas:
CJam,
2220 bytesPruébalo aquí.
Explicación
¿Cómo se ajusta una cuadrícula 2D de caracteres en una capa de espacios (o cualquier otro carácter)? Correcto: cuatro veces, agrega un espacio a cada línea y luego gira la cuadrícula 90 grados. Eso es exactamente lo que estoy haciendo aquí con ocho rotaciones: cuatro para espacios, cuatro para
#
:fuente
vim,
2827 pulsaciones de teclasAsume que la entrada se proporciona como una sola línea de texto en el archivo abierto actualmente.
Explicación:
Esto también se puede ejecutar como un "programa" así:
Lo cual es un poco complicado, pero funciona.
fuente
pb - 89 bytes
¡Este es el tipo de desafío para el que se hizo pb! No es que sea competitivo para este tipo de desafío ni nada. Sigue siendo un horrible lenguaje de golf. Sin embargo, desafíos como este son mucho menos difíciles de resolver en pb que otros. Dado que pb trata su salida como un lienzo 2D y puede escribir en cualquier coords, cualquier cosa que implique posicionar texto / dibujar alrededor del texto (es decir, este desafío) se maneja de manera bastante intuitiva.
Míralo correr:
esta visualización se creó con una versión en desarrollo de pbi, el intérprete de pb. La línea con el fondo azul es
Y=-1
, donde la entrada se almacena cuando se inicia el programa. El rectángulo con el fondo rojo es la ubicación actual del pincel. Los rectángulos con fondos amarillos están en cualquier lugar donde el carácter ascii 32 (un espacio) esté escrito explícitamente en el lienzo. Cualquier espacio en blanco sin este fondo en realidad tiene el valor0
, que se convierte en un espacio.Aquí está el código con los comentarios que usé al escribirlo, con algunos encabezados de sección temáticamente relevantes;)
fuente
Not that it's competitive... It's still a horrible golf language.
Lo digo, pero en este momento solo estoy empatado para el final. Esperaba ser el último absoluto. : Dbrainfuck - 156 bytes
Esto es probablemente golfable. Hay algunos lugares donde no sabía si sería mejor almacenar un valor en algún lugar para reutilizarlo o rehacerlo / ir a buscarlo a otra parte de la cinta. En lugar de hacer el trabajo para resolverlo, no hice eso. :RE
Con comentarios:
fuente
K, 21 bytes
Aliste la cadena, agregue un espacio a los cuatro lados de una cadena, luego agregue un octothorpe a cada lado de la cadena. En acción:
Funciona en oK, Kona y k5.
Hay bastantes variaciones dentro de un carácter de longitud que eliminan la redundancia en lo anterior, pero ninguna parece romperse incluso cuando solo tenemos que realizar la operación de "ajuste" dos veces:
fuente
Pyth, 31 bytes
Gracias a las personas en los comentarios que dan pistas sobre cómo jugar más al golf, realmente no conozco el idioma tan bien como (probablemente) se puede decir.
fuente
"#"
es igual a\#
. Si tiene que concatenar muchos objetos, es mejor usarlosj""[
seguidos de una lista de objetos, que es igual ajk[
.s[
es igual ajk[
para matrices de cadenas. Además, también puede asignarK
sobre la marcha, comojk[K\#
, y simplemente soltar la asignación inicial. Asignarlz
aJ
no ayuda si solo se usa dos veces, así que ahorreJ
para otra cosa. Aquí, si cambiaZ
porJ
, puede eliminar el=
. Finalmente, puede asignarJ
sobre la marcha. El código se ve así:_Js[K\#*d+2lzKb*K+4lz)jd[KzK)J
Python 3, 88 bytes
Gracias @WorldSEnder
Ejemplo de E / S:
fuente
s=" "
al principio ahorra 1 byte en general, creo.;
lugar de nuevas líneas por cierto? Ambos deberían ser un byte, ¿verdad?Perl,
4376 bytesTransforme cada línea de entrada de texto como se especifica:
Por ejemplo:
Aquí le mostramos cómo ver realmente lo que está haciendo:
Entonces algo más como esto:
fuente
e
modificador ... pero si lo hace, puede ser que también acaba de caer por completo la sustitución:$x="#"x(4+($z=y!!!c));$y="#".$"x(2+$z)."#\n";$_="$x\n$y# $_ #\n$y$x"
. Use líneas nuevas reales en lugar de\n
y solo tiene 65 bytes, más 2 para-lp
.JavaScript (ES6), 73
Utilizando en gran medida la cadena de plantilla, las 2 nuevas líneas son significativas y contadas.
Pruebe a ejecutar el fragmento a continuación en cualquier navegador compatible con EcmaScript 6 (Firefox y el último Chrome, tal vez Safari).
Esto es bastante más corto que mi primer intento, derivado de este otro desafío :
fuente
z
como un efecto secundario?)Pitón 2, 74
Toma entrada en citas como
"Hello World"
.# _ #
.b
son# #
el número correcto de espacios, rodeadas de líneas nuevas a cada lado para cuidar las cuatro líneas nuevas.#
multiplican por la longitud de la entrada.Las líneas se concatenan e imprimen.
fuente
MATLAB,
9391 bytesNo es el más bonito, pero hace el trabajo.
Explicación del Código
Paso 1
Lea en una cadena de STDIN y coloque un espacio inicial y final dentro de él. 32 es el código ASCII para un espacio y la lectura en la entrada como un tipo de cadena fusiona los 32 en espacios.
Paso 2
Declare una matriz de caracteres de 5 signos hash en un vector de columna.
Paso 3
Cree una matriz de caracteres de 2 filas que se rellene con signos hash primero seguidos por espacios en blanco después. El número de caracteres es la longitud de la cadena de entrada más 2 para que podamos acomodar el espacio antes y después de la cadena.
Etapa 4
Vamos a armar todo junto. Colocamos la primera columna de 5 hashes, seguida de la parte central y seguida de otra columna de 5 hashes. La parte central consiste en la matriz de caracteres de 2 filas creada en el Paso # 3, la cadena de entrada en sí que tiene un espacio inicial y final, seguida de la matriz de caracteres de 2 filas pero invertida.
Ejecuciones de ejemplo
fuente
Perl 5.14+,
5756 bytes54 bytes + 2 bytes para
-lp
(si la entrada no termina en una nueva línea,-l
se puede descartar para guardar un byte).Acepta entrada en STDIN:
Cómo funciona
El núcleo del programa es un segmento de lista:
Esto proporciona una forma compacta de almacenar las tres filas únicas de la salida (las dos primeras filas del cuadro delimitador son las mismas que las dos últimas, solo reflejadas). Para la cadena de entrada
foo
, los resultados del segmento serían:Unir estos valores con
#\n#
nos da nuestra caja.Tenga en cuenta que se requiere Perl 5.14+ para usar el
r
modificador no destructivo para el operador de transliteracióny///
.fuente
PHP
9593 bytesNo es exactamente brillante ni nada similar, ¡pero en realidad fue divertido!
No es exactamente bonito ni nada, ¡pero funciona de manera brillante!
Gracias a @Titus por guardar 2 bytes.
fuente
$argv
lugar de$_GET
y-r
.C ++, 198 bytes
Mi primer intento de codegolf, y aunque aprendí que C ++ probablemente no sea el mejor lenguaje para jugar golf, sentí que lo hice decentemente (?) En mi primer intento.
Sin golf
n, o y t representan las líneas con hash completo, la entrada (con hashes en cada extremo) y las líneas entre la entrada y las líneas con hash respectivamente.
fuente
> <> ,
106104BytesTengo la sensación de que> <> puede no ser el mejor lenguaje para esto, pero he llegado demasiado lejos para rendirme y no publicar esto. Se
*
supone que el final de la línea 4 es un espacio. ¿No te encanta lo increíblemente grotesco que se ve este código? Pruébalo en línea .Aquí hay una versión sin nada más que cambiadores de dirección para dar una idea de cómo se mueve el puntero (tenga en cuenta que he omitido las declaraciones de "teletransporte", es decir
.
).Flujo de dirección:
Explicación
Mi visualización de la pila se basará en la entrada
input
. > <> es un lenguaje bidimensional, así que preste atención a dónde se mueve el puntero entre las líneas, ya que ejecuta el código debajo de él (en este código<>v^
se utilizan principalmente para cambiar de dirección). Comenzaré mis explicaciones desde donde comienza el puntero. Tenga en cuenta que habrá dos líneas repetidas, ya que el puntero se mueve hacia atrás después de la quinta línea.Lo que siempre me gusta de> <> es su capacidad para modificar su propio código fuente, y lo uso en este programa. Las líneas 3 y 4 se reutilizan para imprimir las dos últimas líneas mediante una modificación de un carácter en cada una.
Línea 1: bucle de entrada
Apilar:
[-1,t,u,p,n,i]
Línea 2: genera la tercera línea de salida
Apilar:
[9,9,9,9,#, ,t,u,p,n,i, ,#]
Línea 3: imprime la primera línea de salida
Apilar:
[0,9,9,9,#, ,t,u,p,n,i, ,#]
Salida:
Línea 4: imprime la segunda línea de salida
Apilar:
[0,9,9,#, ,t,u,p,n,i, ,#]
Salida (
*
representa espacio):Línea 5: imprime la tercera línea de salida
Apilar:
[9,9,0]
Salida:
Línea 6: se configura para imprimir la cuarta y quinta línea de salida
Apilar:
[0,9,9,0]
Línea 4: imprime la cuarta línea de salida
Apilar:
[0,9,0]
Salida (
*
representa espacio):Línea 3: imprimir la última línea de salida
Apilar:
[0,0]
Salida:
fuente
PHP,
9391 bytesToma información del argumento de la línea de comando; escapar de espacios o usar comillas simples. Corre con
-r
.fuente
Pyke (no competitivo), 6 bytes
Pruébalo aquí!
Pyke fue escrito después del desafío y, por lo tanto, no es competitivo.
.X
toma una cadena y una cadena constante arg y rodea una cadena con ese grupo de caracteres. El argumento constante puede tener hasta 8 caracteres y tener diferentes efectos sobre cómo se rodea la cadena.fuente
05AB1E,
26 bytes, no compitePruébalo en línea!
EDITAR: Woah! ¡No me di cuenta de que este es un viejo desafío! ¡Lo siento!
fuente
C # - 142 bytes (el cuerpo del método es 104)
Sin golf:
fuente
PowerShell,
8482 bytesfuente
Lua, 90 bytes
fuente
Ruby, 83 bytes
Supongo que podría jugarse más, pero como todavía no hay una respuesta de Ruby, aquí está:
fuente
Raqueta 172 bytes
Sin golf:
Pruebas:
Salida:
fuente
C #,
116110 bytesSin golf:
Versión inicial:
Programa completo con casos de prueba:
fuente
var
lugar destring
.var
palabra clave solo permite una declaración.C (gcc) 165 bytes
Versión sin golf
fuente
SmileBASIC, 73 bytes
fuente